Sphinx+Mysql+中文分詞安裝-實現中文全文搜尋
1、什麼是Sphinx
Sphinx 是一個在GPLv2 下發布的一個全文檢索引擎,商業授權(例如, 嵌入到其他程式中)
需要聯絡我們(Sphinxsearch.com)以獲得商業授權。
一般而言,Sphinx是一個獨立的搜尋引擎,意圖為其他應用提供高速、低空間佔用、高結果
相關度的全文搜尋功能。Sphinx可以非常容易的與SQL資料庫和指令碼語言整合。
當前系統內建MySQL和PostgreSQL 資料庫資料來源的支援,也支援從標準輸入讀取特定格式
的XML資料。通過修改原始碼,使用者可以自行增加新的資料來源(例如:其他型別的DBMS
的原生支援)。
搜尋API支援PHP、Python、Perl、Rudy和Java,並且也可以用作MySQL儲存引擎。搜尋
API非常簡單,可以在若干個小時之內移植到新的語言上。
Sphinx 是SQL Phrase Index的縮寫,但不幸的和CMU的Sphinx專案重名
2、Sphinx的特性
高速的建立索引(在當代CPU上,峰值效能可達到10 MB/秒);
高效能的搜尋(在2 – 4GB 的文字資料上,平均每次檢索響應時間小於0.1秒);
可處理海量資料(目前已知可以處理超過100 GB的文字資料, 在單一CPU的系統上可處理100 M 文件);
提供了優秀的相關度演算法,基於短語相似度和統計(BM25)的複合Ranking方法;
支援分散式搜尋;
provides document exceprts generation;
可作為MySQL的儲存引擎提供搜尋服務;
支援布林、短語、詞語相似度等多種檢索模式;
文件支援多個額外的屬性資訊(例如:分組資訊,時間戳等);
停止詞查詢;
支援單一位元組編碼和UTF-8編碼;
原生的MySQL支援(同時支援MyISAM 和InnoDB );
原生的PostgreSQL 支援.一、安裝所需檔案mmseg-0.7.3.tar.gz 中文分詞
http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz
mysql-5.1.26-rc.tar.gz mysql-5.1.26原始碼
sphinx-0.9.8-rc2.tar.gz sphinx-0.9.8-rc2原始碼
二、開始安裝
1.安裝libmmseg
安裝mmseg完成,測試一下
有問題可以嘗試執行下面命令
2.重新編譯mysql
在安裝之前先打兩個補丁,這個是支援中文必須打的補丁
3.安裝sphinx
官網解決辦法:
In the meantime I've change the configuration file and set
#define USE_LIBICONV 0 in line 8179.
修改configure 檔案把 #define USE_LIBICONV 0 最後的數值由1改為0
重新編譯。
vi configure
輸入/define USE_LIBICONV 找到目標行
按i鍵後將1改成0,按esc,輸入:wq儲存退出
4.配置sphinx
修改/usr/local/sphinx/etc/sphinx.conf
5.索引建立
裝好sphinx後在sphinx的目錄中有三個目錄 分別為bin etc var
bin中 存有sphinx用到的一些執行檔案 包括 indexer 索引建立 search 查詢工具 searchd 查詢伺服器 等
為了下面測試方便,我們先將sphinx.conf自帶的example.sql指令碼倒入的mysql中
//建立了一個test庫,並建立了documents測試表和資料
索引的建立方法為
test1為資源名稱 不寫為預設所有都建立索引
附:
建立索引期間可能由於不同版本的資料庫導致indexer找不到共享庫libmysqlclient.so.16
需要把/opt/mysql/lib/mysql/libmysqlclient.so.16.0.0 這個檔案複製到/usr/lib下 或者作軟連線即可
6.查詢伺服器
/usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf 為開啟
/usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf --stop 為關閉
sphinx的查詢 可以大致分為三種
1 資料庫引擎中的查詢
2 通過search工具查詢
/usr/local/sphinx/bin/search --config /usr/local/sphinx/etc/sphinx.conf test
3 通過php的介面查詢 詳見sphinxapi.php
三、在mysql中的使用SphinxSE方式呼叫Sphinx 1.在mysql中的使用SphinxSE方式呼叫Sphinx首先建立一張索引專用表:
test1:索引的名稱,可以在sphinx.conf中查詢到
建立完索引專用表後,我們就可以在mysql中使用它了,例如,在mysql中輸入
執行後,結果記錄中將會顯示包含doc字串的所用記錄行
2.中文分詞應用
生成詞典
進入到mmseg的原始碼目錄後
在data下邊會產生一個檔案unigram.txt.uni
這個就是生成的字典 然後把字典改名為uni.lib放在可以讀取的目錄中即可
修改 sphinx.conf(/usr/local/sphinx/etc/sphinx.conf)配置檔案
在索引中加入
(如果searchd已經再執行,先kill 它再執行)
注意:在新增完資料後,需要重新載入索引,這樣新的資料才能被快取進去
重建索引,成功後,開啟索引監聽
在ide硬碟上建索引的速度
這樣,就可以在phpmyadmin中進行測試了。
好像沒出來。。。。
修改 sphinx.conf
去掉下面的註釋
再重啟searchd就可以搜出結果了
使用service 控制sphinx
先增加一sphinx使用者並屬於website組(事先已存在),並修改sphinx目錄的屬主
建立/etc/init.d/sphinx指令碼
修改許可權並加入到service,機器啟動時自動啟動