LNMP+sphinx實現大資料秒查

來源:互聯網
上載者:User

標籤:lnmp

  

Sphinx是由俄羅斯人Andrew Aksyonoff開發的一個全文檢索索引引擎。意圖為其他應用提供高速、低空間佔用、高結果 相關度的全文檢索搜尋功能。Sphinx可以非常容易的與SQL資料庫和指令碼語言整合。當前系統內建MySQL和PostgreSQL 資料庫資料來源的支援,也支援從標準輸入讀取特定格式 的XML資料。


Sphinx的特性如下:

a)  高速的建立索引(在當代CPU上,峰值效能可達到10 MB/秒);

b)  高效能的搜尋(在2 – 4GB 的文本資料上,平均每次檢索回應時間小於0.1秒);

c)  可處理海量資料(目前已知可以處理超過100 GB的文本資料, 在單一CPU的系統上可處理100 M 文檔);

d)  提供了優秀的相關度演算法,基於短語相似性和統計(BM25)的複合Ranking方法;

e)  支援分布式搜尋;

f)  支援短語搜尋

g)  提供文檔摘要產生

h)  可作為MySQL的儲存引擎提供搜尋服務;

i)  支援布爾、短語、詞語相似性等多種檢索模式;

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

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

l)  支援斷詞;


雖然mysql的MYISAM提供全文索引,但是效能卻不敢讓人恭維,另外資料庫畢竟不是很善於做這樣的事情,我們需要把這些活讓給更適合的程式去做,減少資料庫的壓力。因此採用Sphinx來做mysql的全文索引工具是一個很好的選擇。這個星期主要來學習這個這個工具的使用,下面將學習過程大致的記錄一下,做個備忘,也希望能對學習這個工具的其他朋友有所啟發。


  1. 安裝sphinx

wget http://sphinxsearch.com/files/sphinx-2.2.11-release.tar.gztar -xf sphinx-2.2.11-release.tar.gz  && cd sphinx-2.2.11-release./configure  --prefix=/usr/local/spinx --with-mysqlmake && make installln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/libsphinxclient 安裝(PHP模組需要)cd api/libsphinxclient./configure –prefix=/usr/local/sphinxmake &&  make install

2.安裝php擴充

wget http://pecl.php.net/get/sphinx-1.3.0.tgztar zxf sphinx-1.3.3.tgz && cd sphinx-1.3.3./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx=/usr/local/sphinx/make &&  make install


3.建立設定檔

cp /usr/local/sphinx/etc/sphinx-min.conf.dist  /usr/local/sphinx/etc/sphinx.conf
## Minimal Sphinx configuration sample (clean, simple, functional)#source src1{        type                    = mysql        sql_host                = localhost        sql_user                = root        sql_pass                = www.123        sql_db                  = test        sql_port                = 3306  # optional, default is 3306        sql_query               =                 SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content                 FROM documents        sql_attr_uint           = group_id        sql_attr_timestamp      = date_added}index test1{        source                  = src1        path                    = /usr/local/spinx/var/data/test1}indexer{        mem_limit               = 32M}searchd{        listen                  = 9312        listen                  = 9306:mysql41        log                     = /usr/local/spinx/var/log/searchd.log        query_log               = /usr/local/spinx/var/log/query.log        read_timeout            = 5        max_children            = 30        pid_file                = /usr/local/spinx/var/log/searchd.pid        seamless_rotate         = 1        preopen_indexes         = 1        unlink_old              = 1        workers                 = threads # for RT to work        binlog_path             = /usr/local/spinx/var/data}


4.建立索引並啟動

/usr/local/spinx/bin/indexer  -c /usr/local/spinx/etc/sphinx.conf --all/usr/local/spinx/bin/searchd  -c /usr/local/spinx/etc/sphinx.conf

5.查詢驗證

cd /root/sphinx-2.2.11-release/apipython test.py  testDEPRECATED: Do not call this method or, even better, use SphinxQL instead of an APIQuery ‘test ‘ retrieved 3 of 3 matches in 0.000 secQuery stats:        ‘test‘ found 5 times in 3 documentsMatches:1. doc_id=1, weight=2, group_id=1, date_added=2016-11-30 01:21:202. doc_id=2, weight=2, group_id=1, date_added=2016-11-30 01:21:203. doc_id=4, weight=1, group_id=2, date_added=2016-11-30 01:21:20


mysql> select * from documents;+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+| id | group_id | group_id2 | date_added          | title           | content                                                                   |+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+|  1 |        1 |         5 | 2016-11-30 01:21:20 | test one        | this is my test document number one. also checking search within phrases. ||  2 |        1 |         6 | 2016-11-30 01:21:20 | test two        | this is my test document number two                                       ||  3 |        2 |         7 | 2016-11-30 01:21:20 | another doc     | this is another group                                                     ||  4 |        2 |         8 | 2016-11-30 01:21:20 | doc number four | this is to test groups                                                    |+----+----------+-----------+---------------------+-----------------+---------------------------------------------------------------------------+


參考網址: http://blog.csdn.net/wangjiuwang/article/details/52002172 

       http://www.cnblogs.com/findgor/p/5644540.html 

       http://www.sphinxsearch.org/sphinx-faq 


本文出自 “不拋棄!不放棄” 部落格,請務必保留此出處http://thedream.blog.51cto.com/6427769/1878194

LNMP+sphinx實現大資料秒查

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.