sphinx中文版Coreseek中文檢索引擎安裝和使用方法(Linux)

sphinx中文版Coreseek中文檢索引擎安裝和使用方法(Linux)

    衆所周知,在MYSQL數據庫中,若是你在百萬級別數據庫中使用 like 的話那你必定在那罵娘,coreseek是一個針對於中文檢索方案的一種全文檢索技術,基於sphinx開發的。可是在coreseek中不但支持了mysql數據源,還支持了python、xml、mssql、odbc。並且提供了不少語言PHP、C#、JAVA、python等豐富API接口。在中文全文搜索引擎中,基本沒有什麼能有coreseek匹敵的(是我太深刻了嘛-^-),在千萬條數據測試下,coreseek生成索引後全文檢索的時間不會超過0.5s,這個速度是很是可觀的。

1. 安裝必要的編譯工做支持

  安裝coreseek以前須要安裝這些工具,固然使用yum安裝你的機子須要先保證已經聯網php

yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel expat-devel

2. 下載coreseek和編譯安裝

$ wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
$ tar xzvf coreseek-3.2.14.tar.gz
$ cd coreseek-3.2.14

##安裝mmseg中文分詞
$ cd mmseg-3.2.14
$ ./bootstrap    #輸出的warning信息能夠忽略,若是出現error則須要解決
$ ./configure --prefix=/usr/local/mmseg3
$ make && make install
$ cd ..

##安裝coreseek
$ cd csft-3.2.14
$ sh buildconf.sh    #輸出的warning信息能夠忽略,若是出現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    ##若是提示mysql問題,能夠查看MySQL數據源安裝說明,注意--prifix後面的路徑要和本身安裝的路徑一致
$ make && make install
$ cd ..

3. 配置MYSQL數據源

cp /usr/local/coreseek/etc/sphinx.conf.dist /usr/local/coreseek/etc/sphinx.conf
vi /usr/local/coreseek/etc/sphinx.conf
          建立一個統計表
 
     sphinx.conf配置以下:
 
source news
{
    type          = mysql
    sql_host      = localhost
    sql_user      = root
    sql_pass      =123456
    sql_db        = test
    sql_port      =3306
    sql_sock      =/tmp/mysql.sock
    sql_query_pre = SET NAMES utf8
    sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM news
    sql_query     = SELECT id, contents, intro, title FROM news WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1)
}
#設置增量索引,數據量較小時,也能夠不設置而定時從新生成索引
source increment : news
{
    sql_query_pre = SET NAMES utf8
    sql_query     = SELECT id, contents, intro, title FROM news WHERE id >( SELECT max_doc_id FROM sph_counter WHERE counter_id=1)
    #這是增量索引的數據源sql。和上面保持一致,惟一的變化,就是where條件以後,這裏查詢的是大於上次從新生成索引的id,即:剛剛添加的數據
}
 
index news
{
    source           = news
    path             =/usr/local/coreseek/var/data/news
 
    docinfo          =extern
    mlock            =0
    morphology       = none
    charset_dictpath =/usr/local/mmseg3/etc/
    charset_type     = zh_cn.utf-8
}
 
index increment : news
{
    source           = increment
    path             =/usr/local/coreseek/var/data/increment
    charset_dictpath =/usr/local/mmseg3/etc/
    charset_type     = zh_cn.utf-8
}
 
indexer
{
 
    mem_limit    =128M
}
searchd
{
    log               =/usr/local/coreseek/var/log/searchd.log
    read_timeout      =5
    client_timeout    =300
    max_children      =30
    pid_file          =/usr/local/coreseek/var/log/searchd.pid
    max_matches       =1000
    seamless_rotate   =1
    preopen_indexes   =0
    unlink_old        =1
    mva_updates_pool  =1M
    max_packet_size   =8M
    max_filter_values =4096
}

  

 
說明:若是想配置多個數據源,在配置文件中添加source和index便可,能夠像增量那樣添加,但不須要後面的 : news,就能夠了,須要注意的是在sph_counter便可以數據統計表中,須要使用不一樣的id來區分不一樣的數據表

4.生成索引命令

生成索引 html

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --all --rotate

        說明:這時sph_counter 表裏會增長一條記錄。存放的就是你內容表中的最大id。若是想要生成單個數據源的索引, /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf news --rotate(這條命令只生成news的索引)python

開啓後臺進程     mysql

/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/sphinx.conf

        說明:這時候對Mysql數據源進行搜索的話其實已是有數據的。
c++

增量索引git

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf increment --rotate

 

        說明:這裏增量索引的名稱要換成本身對應的增量索引的名稱
sql

合併索引  數據庫

 

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --merge news increment --rotate

 

        說明:合併索引後,news索引此時能夠檢索到全部的數據,可是sph_counter表中最大id是沒有變的,所以還須要在必定的時間內再次從新生成全部的索引

 

爲了保持數據的完整性,從新生成索引bootstrap

  /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --all --rotate

5.執行定時任務,更新增量索引、從新生成索引

*/1****/bin/sh    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf increment --rotate
*/5****/bin/sh    /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --merge news increment --rotate
301***  /bin/sh  /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --all --rotate
        說明: 以上任務計劃的意思是:每隔一分鐘執行一遍增量索引,每五分鐘執行一遍合併索引,天天1:30執行總體索引。

6.php操做coreseek

        複製api/sphinxapi.php文件到你的項目
        require ( "sphinxapi.php" );
        //這裏是直接把api複製到項目的目錄中進行使用,也能夠安裝php的sphinx擴展進行使用,如下會詳細介紹php7.0安裝sphinx擴展
 

6.php安裝sphinx擴展

[第一步] 安裝依賴libsphinxclient
#cd /usr/local/coreseek-3.2.14/csft-3.2.14/api/libsphinxclient
#./configure  --prefix=/usr/local/sphinxclient
#configure: creating ./config.status   
#config.status: creating Makefile   
#config.status: error: cannot find input file:Makefile.in   #報錯configure失敗       
 
//處理configure報錯   
編譯過程當中報了一個config.status: error: cannot find input file: src/Makefile.in這個的錯誤,而後運行下列指令再次編譯就能經過了:   
# aclocal   
# libtoolize --force   
# automake --add-missing   
# autoconf   
# autoheader   
# make clean   
 
//重新configure編譯   
# ./configure   
# make && make install

[第二步] 安裝sphinx的PHP擴展
# wget http://git.php.net/?p=pecl/search_engine/sphinx.git;a=snapshot;h=9a3d08c67af0cad216aa0d38d39be71362667738;sf=tgz
# tar zxvf sphinx-9a3d08c.tar.gz
# cd sphinx-9a3d08c
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config --with-sphinx=/usr/local/sphinxclient
# make && make install
 
說明:這裏注意php-config的路徑要和本身服務器上的路徑一致才行,使用php -m 查看模塊是否已經安裝上,若是裏面有sphinx模塊,證安裝成功,修改php.ini便可成功。這裏若是是php7必定要安裝php7可用的擴展。
 
安裝完成後修改php.ini,在末尾添加以下內容
 
extension = sphinx.so
        說明:查看phpinfo();查看擴展是否安裝成功
而後重啓php-fpm便可,執行php -m,看到有sphinx擴展說明安裝
/etc/init.d/php-fpm restart
相關文章
相關標籤/搜索