1. 程式人生 > >Sphinx+Mysql+中文分詞安裝-實現中文全文搜尋

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的儲存引擎提供搜尋服務;

支援布林、短語、詞語相似度等多種檢索模式;

文件支援多個全文檢索欄位(最大不超過32個);

文件支援多個額外的屬性資訊(例如:分組資訊,時間戳等);

停止詞查詢;

支援單一位元組編碼和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原始碼

http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz

二、開始安裝
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,機器啟動時自動啟動