溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

全文搜索Sphinx怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2021-12-30 17:43:18 來源:億速云 閱讀:155 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“全文搜索Sphinx怎么實(shí)現(xiàn)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

1.Sphinx簡(jiǎn)介

1.1.Sphinx是什么

Sphinx是由俄羅斯人Andrew Aksyonoff開發(fā)的一個(gè)全文檢索引擎。意圖為其他應(yīng)用提供高速、低空間占用、高結(jié)果 相關(guān)度的全文搜索功能。Sphinx可以非常容易的與SQL數(shù)據(jù)庫和腳本語言集成。當(dāng)前系統(tǒng)內(nèi)置MySQL和PostgreSQL 數(shù)據(jù)庫數(shù)據(jù)源的支持,也支持從標(biāo)準(zhǔn)輸入讀取特定格式 的XML數(shù)據(jù)。通過修改源代碼,用戶可以自行增加新的數(shù)據(jù)源(例如:其他類型的DBMS 的原生支持)

1.2.Sphinx的特性

  • 高速的建立索引(在當(dāng)代CPU上,峰值性能可達(dá)到10 MB/秒);

  • 高性能的搜索(在2 – 4GB 的文本數(shù)據(jù)上,平均每次檢索響應(yīng)時(shí)間小于0.1秒);

  • 可處理海量數(shù)據(jù)(目前已知可以處理超過100 GB的文本數(shù)據(jù), 在單一CPU的系統(tǒng)上可   處理100 M 文檔);

  • 提供了優(yōu)秀的相關(guān)度算法,基于短語相似度和統(tǒng)計(jì)(BM25)的復(fù)合Ranking方法;

  • 支持分布式搜索;

  • 支持短語搜索

  • 提供文檔摘要生成

  • 可作為MySQL的存儲(chǔ)引擎提供搜索服務(wù);

  • 支持布爾、短語、詞語相似度等多種檢索模式;

  • 文檔支持多個(gè)全文檢索字段(最大不超過32個(gè));

  • 文檔支持多個(gè)額外的屬性信息(例如:分組信息,時(shí)間戳等);

  • 支持?jǐn)嘣~;

1.3.Sphinx中文分詞

中文的全文檢索和英文等latin系列不一樣,后者是根據(jù)空格等特殊字符來斷詞,而中文是根據(jù)語義來分詞。目前大多數(shù)數(shù)據(jù)庫尚未支持中文全文檢索,如Mysql。故,國(guó)內(nèi)出現(xiàn)了一些Mysql的中文全文檢索的插件,做的比較好的有hightman的中文分詞。Sphinx如果需要對(duì)中文進(jìn)行全文檢索,也得需要一些插件來補(bǔ)充。其中我知道的插件有 coreseek 和 sfc 。

  • Coreseek是現(xiàn)在用的最多的sphinx中文全文檢索,它提供了為Sphinx設(shè)計(jì)的中文分詞包LibMMSeg 。并提供了多個(gè)系統(tǒng)的二進(jìn)制發(fā)行版,其中有rpm,deb及windows下的二進(jìn)制包。另外,coreseek也為sphinx貢獻(xiàn)了以下事項(xiàng):

    • GBK編碼的數(shù)據(jù)源支持

    • 采用Chih-Hao Tsai MMSEG算法的中文分詞器

    • 中文使用手冊(cè)(這份中文手冊(cè)對(duì)國(guó)內(nèi)使用sphinx新手——特別是英語不太好的人來說,提供了極大的便利

  • sfc(sphinx-for-chinese)是由網(wǎng)友happy兄提供的另外一個(gè)中文分詞插件。其中文詞典采用的是xdict。據(jù)其介紹,經(jīng)過測(cè)試,目前版本在索引速度上(Linux 測(cè)試平臺(tái))基本上能夠達(dá)到索引UTF-8英文的一半,即官方宣稱速度的一半。(時(shí)間主要是消耗在分詞上)。 現(xiàn)提供了與sphinx最新版(sphinx 0.9.10)同步的sphinx-for-chinese-0.9.10-dev-r2006.tar.gz 。此版本增加了sql_attr_string,經(jīng)過本人的測(cè)試。其安裝和配置都非常方便。happy兄在分詞方面還有另外一個(gè)貢獻(xiàn)——php-mmseg,這是php對(duì)中文分詞的一個(gè)擴(kuò)展庫。

在此,對(duì)以上二位作者謹(jǐn)以最大的敬意

  • 此外,如果你對(duì)中文分詞不感興趣。或者說僅需要實(shí)現(xiàn)類似sql中l(wèi)ike的功能,如: select * from product where prodName like ‘%手機(jī)%’。sphinx也不會(huì)讓你失望,這個(gè)或許就是官網(wǎng)對(duì)中文的簡(jiǎn)單實(shí)現(xiàn)——直接對(duì)字索引。并且搜索速度還不錯(cuò)^_^ 。

本文會(huì)對(duì)以上三種中文應(yīng)用進(jìn)行測(cè)試,并以文檔的方式記錄下來,這也許正是本文檔的重點(diǎn)。

2.安裝配置實(shí)例

2.1在GNU/Linux/unix系統(tǒng)上安裝

Sphinx在mysql上的應(yīng)用有兩種方式:
①、采用API調(diào)用,如使用PHP、java等的API函數(shù)或方法查詢。優(yōu)點(diǎn)是可不必對(duì)mysql重新編譯,服務(wù)端進(jìn)程“低耦合”,且程序可靈活、方便的調(diào)用;
缺點(diǎn)是如已有搜索程序的條件下,需修改部分程序。推薦程序員使用。
②、使用插件方式(sphinxSE)把sphinx編譯成一個(gè)mysql插件并使用特定的sql語句進(jìn)行檢索。其特點(diǎn)是,在sql端方便組合,且能直接返回?cái)?shù)據(jù)給客戶端
不必二次查詢(注),在程序上僅需要修改對(duì)應(yīng)的sql,但這對(duì)使用框架開發(fā)的程序很不方便,比如使用了ORM。另外還需要對(duì)mysql進(jìn)行重新編譯,且需要mysql-5.1以上版本
支持插件存儲(chǔ)。系統(tǒng)管理員可使用這種方式
二次查詢注:到現(xiàn)在發(fā)布版本為止——sphinx-0.9.9,sphinx在檢索到結(jié)果后只能返回記錄的ID,而非要查的sql數(shù)據(jù),故需要重新根據(jù)這些ID再次從數(shù)據(jù)庫中查詢,
正在開發(fā)的sphinx 0.9.10版本已可存儲(chǔ)這些文本數(shù)據(jù),作者曾試過,性能和存儲(chǔ)上的效果都不佳,畢竟還沒出正式版

本文采用的是第一種方式

在*nix系統(tǒng)下安裝,首先需要以下一些軟件支持

軟件環(huán)境:

  • 操作系統(tǒng):Centos-5.2

  • 數(shù)據(jù)庫:mysql-5.0.77-3.el5 mysql-devel(如果要使用sphinxSE插件存儲(chǔ)請(qǐng)使用mysql-5.1以上版本)

  • 編譯軟件:gcc gcc-c++ autoconf automake

中文的全文檢索和英文等latin系列不一樣,后者是根據(jù)空格等特殊字符來斷詞,而中文是根據(jù)語義來分詞。中文分詞主要有2個(gè)插件

Coreseek是現(xiàn)在用的最多的sphinx中文全文檢索,它提供了為Sphinx設(shè)計(jì)的中文分詞包LibMMSeg ,是基于sphinx的基礎(chǔ)上開發(fā)的。

sfcsphinx-for-chinese是由網(wǎng)友happy兄提供的另外一個(gè)中文分詞插件。其中文詞典采用的是xdict。

本文主要介紹Coreseek的安裝方法

四、  Coreseek(支持中文檢索的sphinx)安裝

因?yàn)閏oreseek需要autoconf 2.64以上版本,因此需要升級(jí)autoconf,不然會(huì)報(bào)錯(cuò)從http://download.chinaunix.net/download.php?id=29328&ResourceID=648下載autoconf-2.64.tar.bz2,安裝方法如下:

tar -jxvf autoconf-2.64.tar.bz2

cd autoconf-2.64

./configure

make

make install

新版本的coreseek將詞典和sphinx源程序放在了一個(gè)包中,因此只需要下載coreseek包就可以了。

http://pan.baidu.com/s/1dEK4x3r

tar xzvf coreseek-3.2.14.tar.gz

cd mmseg-3.2.14

./bootstrap    #輸出的warning信息可以忽略,如果出現(xiàn)error則需要解決

./configure --prefix=/usr/local/mmseg3

make && make install

cd ..

cd csft-3.2.14

sh buildconf.sh    #輸出的warning信息可以忽略,如果出現(xiàn)error則需要解決

./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql

make && make install

cd ..

如果出現(xiàn)這種報(bào)錯(cuò)config.status: error: cannot find input file: src/Makefile.in,就在configure 之前執(zhí)行如下命令
aclocal

libtoolize --force
automake --add-missing
autoconf
autoheader
make clean

“全文搜索Sphinx怎么實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI