關于全文搜索的技術方案

jopen 10年前發布 | 57K 次閱讀 全文搜索 搜索引擎

一、 MySQL FULLTEXT

1.   介紹: Fulltext是全文索引,mysql支持英文的全文索引(通過尋找某些分隔符來確定單詞的起         始位置和結束位置),是mysql的一部分,如果需要建立中文的全文索引需要安裝插件。

2.   使用:

     CREATE TABLE 時或之后使用 ALTER TABLE CREATE INDEX CHARVARCHAR 或          TEXT 列上創建。全文搜索時通過 MATCH() 函數完成。

3.   優點: Mysql自帶,實現簡單

4.   缺點: 僅支持MyISAM引擎表;對中文支持差;效率可能一般;

5.   參考:

    MySQL 英文全文搜索和中文全文搜索

          http://blog.sina.com.cn/s/blog_4b3c9085010005hd.html

    MySQL Ver5.1全文搜索官方手冊

                http://dev.mysql.com/doc/refman/5.1/zh/functions.html#fulltext-search

6.   補充: 如果是英語系,可以考慮直接使用?

7.   加分詞插件?

 >> 我們用的Innodb存儲引擎,排除。

二、 Lucene/Solr

1.   介紹:Lucene是一套用于全文檢索搜尋開放源碼程式庫,近幾年最受歡迎的免費Java資訊        檢索程式庫。Solr - 使用Lucene的企業搜索服務器。

2.   使用:安裝jdk, tomcat等環境;

3.   優點:開箱即用;對任何文件建立索引進行搜索,速度快; 使用的人多;配置等比較靈活;

4.   缺點:實現比較復雜, 不支持JAVA以外的API?;索引難維護;

5.   參考:http://lucene.apache.org/

6.   推薦書籍:《Lucene IN ACTION

 >> 該方案需要JAVA同事搭建一個通用的搜索引擎,并提供接口。 看項目整體架構設計了。


三、 Sphinx(SQL Phrase Index)/ Coreseek/SphinxSE

1.    介紹:Sphinx是一個基于SQL的全文檢索引擎,可以結合MySQL,PostgreSQL做全文搜索,它可以提供比數據庫本身更專業的搜索功能,使得應用程序更容易實現專業化的全文檢索。Sphinx特別為一些腳本語言設計搜索API接口,如PHP,Python,Perl,Ruby等,同時為MySQL也設計了一個存儲引擎插件。

     CoreseekSphinx的本地化版本,開源的中文檢索/搜索引擎。

     SphinxSE是一個可以編譯進MySQL 5.x版本的MySQL存儲引擎,它利用了該版本MySQL的插件式體系結構。它其實是一個允許MySQL服務器與searchd交互并獲取搜索結果的嵌入式客戶端。所有的索引和搜索都發生在MySQL之外。
顯然,SphinxSE的適用于:
使將MySQL FTS 應用程序移植到Sphinx;
使沒有Sphinx API的那些語言也可以使用Sphinx;
當需要在MySQL端對Sphinx結果集做額外處理(例如對原始文檔表做JOIN,MySQL端的額外過濾等等)時提供優化。http://www.coreseek.cn/products-install/sphinxse/

     2.   使用:網上文檔和資料很多。

     3.   優點:開發源碼為C/C++;MYSQL POSTGRES集成的非常好, 支持原生的          mysql/xml/python等數據源;應用的人多;性能還不錯;

     4.   缺點:索引的實時更新不如lucene(新版有提高);功能不如lucene強大;

               SphinxSE需要對Mysql源碼重編譯;

     5.   參考:

         Coreseek官網                   

              http://www.coreseek.cn/opensource/Sphinx/

         Sphinx+Mysql+中文分詞安裝-實現中文全文搜索

       http://blog.csdn.net/lgm252008/article/details/5373436 

   與luceneMySQL's full-text search的比較

           http://stackoverflow.com/questions/737275/comparison-of-full-text-search-engine-lucene-sphinx-postgresql-mysql

   推薦:基于Sphinx+MySQL的千萬級數據全文檢索(搜索引擎)架構設計[原創] by 張宴

>> 可以考慮,已安裝測試中。

四、 Xunsearch

1.   http://www.xunsearch.com/

2.   只提供PHPAPI,不考慮。主要為hightman(scws中文分詞作者)個人開發貢獻。

3.   比較關于全文搜索的技術方案

>> PHP專屬,不考慮。

五、 Clucene

1.   介紹:C++版的全文檢索引擎,完全移植于Lucene(通過修改Java的代碼改編),采用 STL 編寫。有php擴展,對中文支持不是很好。

2.   缺點:比較非主流..; 若干年未更新,使用人很少;

3.   參考:http://sourceforge.net/projects/clucene/files/   源碼

            http://clucene.sourceforge.net/doc/html/files.html  api文檔

>> 沒更新,沒人用,不考慮

六、 Xapian

1.   介紹:Xapian是一個用C++編寫的全文檢索程序,他的作用類似于Javalucene。盡管在Java世界lucene已經是標準的全文檢索程序,但是C/C++世界并沒有相應的工具,而Xapian則填補了這個缺憾。

2.   使用:個優秀的開源搜索引擎項目。上述xunsearch的后臺索引設計就是基于Xapian和          scws中文分詞。

3.   優點:原生的C++編程接口;性能和Lucene不會差太多;可擴展性強;

4.   缺點:工程大,資料少; 應用人群少;主要是怕短期搞不定。。;

5.   參考:http://xapian.org/

              利用Xapian構建自己的搜索引擎: http://www.oschina.net/question/11_7280

      >> 短期難度大,需投入較多人力研究和驗證, 暫不考慮。

//==============================網友評論摘錄 Lucene  VS  Sphinx =======================

    選擇Lucene,基于以下幾點:
1.Sphinx
MySQL是基于數據庫的全文引擎,創建索引是B+樹和hash key-value的方式。而Lucene使用的倒排序索引,即每個詞與包含這個詞的文件形成對應關系。這樣對于搜索文檔,顯然倒排序索引快。
2.Lucene
除了索引功能,還提供文件格式識別(并建立索引)、分詞(以前用的版本只有英文、德文等歐洲的語言)、評分算法(依據此結果排序)、多種搜索方式(組合、模糊、正則等)、搜索詞高亮顯示等諸多功能。
3.
C/SB/S方式分別提供支持。
4.Lucene
提供多種語言開發的版本,如:C++JavaC#RubyPython等。 ???
5.
提供擴展接口,方便功能擴展。

選擇sphinx

支持高速建立索引(可達10MB/秒,而Lucene建立索引的速度是1.8MB/秒)

高性能搜索(在2-4 GB的文本上搜索,平均0.1秒內獲得結果)
高擴展性(實測最高可對100GB的文本建立索引,單一索引可包含1億條記錄)
支持分布式檢索
支持基于短語和基于統計的復合結果排序機制
支持任意數量的文件字段(數值屬性或全文檢索屬性)
支持不同的搜索模式(完全匹配短語匹配任一匹配
支持作為Mysql的存儲引擎(可以只改變sql就能實現全文搜索)
coreseek
就是基于sphinx實現的開源中文檢索引擎

 如果是用php作服務器端腳本,最好還是用sphinx。如果用java做服務器端腳本,lucenesphinx相比lucene,配置簡單,易用,功能沒有lucene完善和強大。【服務端用C++的比較糾結 .. 】

關于全文搜索的技術方案

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!