標籤:query gre 添加 pad width gpl timeout date start
最近在做一個搜尋引擎,主要是對圖書方面的對象級的搜尋,首先來瞭解下Sphinx吧。
它能夠提高你的查詢的速度,這個不是一般的快。
Sphinx是一個基於SQL的全文檢索索引引擎,可以結合MySQL,PostgreSQL做全文檢索搜尋,他可以提供比資料庫本身更專業的搜尋功能,使得應用程式更容易實現專業化的全文檢索索引。 Sphinx特別為一些指令碼語言設計搜尋API介面,如:PHP、Python、Perl、Ruby等,同時為MySQL也設計了一個儲存引擎外掛程式。
Sphinx單一索引最大可包含1億條記錄,在1千萬條記錄情況下的查詢速度為毫秒級。Sphinx建立索引的速度為:建立100萬條記錄的索引只需 3~4分鐘,建立1000萬條記錄的索引可以在50分鐘內完成,而只包含最新10萬條記錄的增量索引,重建一次只需幾十秒。
Sphinx的主要特性包括:
高速索引 (在新款CPU上,近10 MB/秒);
高速搜尋 (2-4G的文本量中平均查詢速度不到0.1秒);
高可用性 (單CPU上最大可支援100 GB的文本,100M文檔);
提供良好的相關排名
支援分布式搜尋;
提供文檔摘要產生;
提供從MySQL內部的外掛程式式儲存引擎上搜尋
支援布爾,短語, 和近義詞查詢;
支援每個文檔多個全文檢索索引域(預設最大32個);
支援每個文檔多屬性;
支援斷詞;
支援單位元組編碼與UTF-8編碼;
看了上面的特點還是挺不錯的,在看看使用的方式吧.
原生MySQl儲存引擎檢索流程:
基於Sphinx儲存引擎檢索:
我還是比較喜歡使用第二種儲存引擎,即使你的程式設計語言不支援Sphinx的API的介面也可以使用喲。
在開始安裝之前需要安裝一些必要的組件
yum -y install gcc g++ gcc-c++ libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers patch libtool automake imake mysql-devel expat-devel |
(1)安裝python支援
yum install –y python python-devel |
(2)編譯安裝LibMMSeg(LibMMSeg是為Sphinx全文檢索搜尋引擎設計的中文分詞軟體包,其在GPL協議下發行的中文分詞法,採用Chin-Hao Tsai的MMSEG演算法。LibMMSeg在本文中用來產生中文分詞詞庫)。
wget http://www.coreseek.com/uploads/sources/mmseg-0.7.3.tar.gz tar zxvf mmseg-0.7.3.tar.gz cd mmseg-0.7.3 ./configure make make install |
(1) 編譯安裝MySQL5.1.26-rc、Sphinx、SphinxSE儲存引擎
wget http://blog.s135.com/soft/linux/nginx_php/mysql/mysql-5.1.26-rc.tar.gz tar zxvf mysql-5.1.26-rc.tar.gz wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8-rc2.tar.gz wget http://www.coreseek.com/uploads/sources/sphinx-0.98rc2.zhcn-support.patch wget http://www.coreseek.com/uploads/sources/fix-crash-in-excerpts.patch tar zxvf sphinx-0.9.8.rc2.tar.gz patch –p1 < ../sphinx-0.98rc2.zhcn-support.patch #補丁 patch –p1 <../fix-crash-in-excerpts.patch #補丁 cp –rf mysqlse ../mysql-5.1.26-rc/storage/sphinx cd ../ cd mysql-5.1.26-rc/ sh BUILD/autorun.sh ./configure --with-plugins= partition,innobase,myisammrg,sphinx --prefix=/usr/local/mysql / --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile make && make install cd ../ |
啟動MySQL資料庫
cp support-files/my-medium.cnf /etc/my.cnf # 設定檔 cp support-files/mysql.server /etc/rc.d/mysqld # 添加 MySQL 服務控制 cd /usr/local/mysql bin/mysql_install_db --user=mysql # 安裝 bin/mysqld_safe --user=mysql & # 測試安裝是否成功 bin/mysql # 進入 MySQL 命令提示字元 啟動停止 /etc/rc.d/mysqld start /etc/rc.d/mysqld stop 於是我們自己建立檔案/etc/rc.local並給予執行許可權。大致內容為: #!/bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql & 或者 /etc/rc.d/mysqld start |
輸入下列命令出現SPHINX表示SphinxSE已經移植到MySQL中去了。
本文使用的0.9.8版本,建議使用0.9.9版本,0.9.9版本是最穩當的版本,我最後也改成了0.9.9版本的。
Sphinx預設不支援中文索引及檢索,以前用Coreseek的補丁來解決,目前Coreseek不單獨提供補丁,而基於Sphinx開發了Coreseek全文檢索索引伺服器,Coreseek應該是現在用的最多的Sphinx中文全文檢索索引,它提供了為Sphinx設計的中文分詞包LibMMSeg包含mmseg中文分詞,其實coreseek-3.2.14.tar.gz中已經包含了sphinx,前面安裝SphinxSE時也可以使用這個壓縮包裡的mysqlse。
安裝autoconf
tar zxvf autoconf-2.64.tar.gz cd autoconf-2.64 ./configure –prefix=/usr make make install |
安裝Coreseek
tar zxvf coreseek-3.2.14.tar.gz cd coreseek-3.2.14 cd mmseg-3.2.14/ ./bootstrap ./configure –prefix=/usr/local/mmseg3 make make install cd ../csft-3.2.14/ sh buildconf.sh ./configure --prefix=/usr/local/coreseek --without-python --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql --host=arm make make install cd /usr/local/coreseek/etc |
進入配置目錄通過命令ls可以看到3個檔案
example.sql sphinx.conf.dist sphinx-min.conf.dist
其中example.sql是執行個體sql指令碼我們將其匯入到資料庫中的test資料庫中作為測試資料(會建立documents表和tags表)
vi sphinx.conf
輸入一些內容:
source src1 { type = mysql sql_host = localhost sql_user = root sql_pass =12345678 sql_db = test sql_port = 3306 # optional, default is 3306 sql_sock = /tmp/mysql.sock sql_query_pre = SET NAMES utf8 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 sql_query_info = SELECT * FROM documents WHERE id=$id } index test1 { source = src1 path = /usr/local/coreseek/var/data/test1 docinfo = extern charset_type = zh_cn.utf-8 mlock = 0 morphology = none min_word_len = 1 html_strip = 0 charset_dictpath = /usr/local/mmseg3/etc/ ngram_len = 0 } indexer { mem_limit = 32M } searchd { port = 9312 log = /usr/local/coreseek/var/log/searchd.log query_log = /usr/local/coreseek/var/log/query.log read_timeout = 5 max_children = 30 pid_file = /usr/local/coreseek/var/log/searchd.pid max_matches = 1000 seamless_rotate = 1 preopen_indexes = 0 unlink_old = 1 } |
說明:程式碼片段sorce src1{***}代表資料來源裡面主要包含了資料庫的配置資訊,src1表示資料來源名字,可以隨便寫。
程式碼片段index test1{***} 代表為那個資料來源建立索引,與source ***是成對出現的,其中的source參數的值必須是某個資料來源的名字。
產生索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --all |
出現的問題:
問題1:如果sh BUILD/autorun.sh
但sphinx就是不會出現在configure –h裡面,需要執行sh BUILD/cleanup 再執行sh BUILD/autorun.sh 然後執行./configure –h現在就可以看到sphinx了。
問題2:如果編譯mysql是報錯查看是否安裝ncurses安裝包
可以執行:yum list|grep ncurses
yum –y install ncurses-devel
yum install ncurses-devel
然後再執行./configure。
問題3 在安裝LibMMSeg需要先執行yum install mysql-devel libxml2-devel expat-devel
問題4 在安裝MMSeg的時候出現錯誤提示為:css/UnigramCorpusReader.cpp:89: error: ‘strncmp‘ was not declared in this scope
手動修改了src/css/UnigramCorpusReader.cpp
在上面添加了一句
#include <string.h>
然後再開始編譯安裝就可以了。
轉載自:http://www.cnblogs.com/sunwubin/p/3250554.html
Mysql+Sphinx實現全文檢索搜尋