天天看點

LNMP+coreseek(sphinx+mmseg3)搭建全文索引庫_sgk

前言,為什麼要安裝LNMP,這個環境以及把常用的MySQL+PHP搭建好了,初學者省去一部分精力調試錯誤,而且LNMP已經很穩定很成熟。

一、 LNMP安裝。

二、 Coreseek(sphinx+mmseg3)安裝。

注意:輸出的warning資訊可以忽略,如果出現error則需要解決,正常無回顯 。

1. 下載下傳coreseek-4.1-beta.tar.gz并解壓。

<a href="http://dl.download.csdn.net/down11/20160530/de90462e2cf8350cbd4ad0f758105c9d.gz?response-content-disposition=attachment%3Bfilename%3D%22coreseek-4.1-beta.tar.gz%22&amp;OSSAccessKeyId=9q6nvzoJGowBj4q1&amp;Expires=1474603028&amp;Signature=rLQ1RFgtXKUJmrbCwDJynFLmRi0%3D" target="_blank">http://dl.download.csdn.net/down11/20160530/de90462e2cf8350cbd4ad0f758105c9d.gz?response-content-disposition=attachment%3Bfilename%3D%22coreseek-4.1-beta.tar.gz%22&amp;OSSAccessKeyId=9q6nvzoJGowBj4q1&amp;Expires=1474603028&amp;Signature=rLQ1RFgtXKUJmrbCwDJynFLmRi0%3D</a>

# cd ~

# wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz  

# tar zxvf coreseek-4.1-beta.tar.gz  

2. 安裝mmseg3

# cd /opt/coreseek-4.1-beta/mmseg-3.2.14  

# ./bootstrap  

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

# make &amp;&amp; make install  

遇到的問題:  

error: cannot find input file: src/Makefile.in  

或者遇到其他類似error錯誤時...  

解決方案:  

依次執行下面的指令,我運作'aclocal'時又出現了錯誤,解決方案請看下文描述

# yum -y install libtool  

# aclocal  

# libtoolize --force  

# automake --add-missing  

# autoconf  

# autoheader  

# make clean  

安裝好'libtool'繼續從'aclocal'開始執行上面提到的一串指令,執行完後再運作最開始的安裝流程即可。

3. 安裝coreseek

# cd /opt/coreseek-4.1-beta/csft-4.1

# ./buildconf.sh

//下面參數裡mysql路徑一定要指定

#./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=/usr/local/mysql

at  -L/usr/local/lib -lrt  -lpthread

libsphinx.a(sphinx.o): In function `xmlUnknownEncoding':

/root/coreseek-4.1-beta/csft-4.1/src/sphinx.cpp:22292: undefined reference to `libiconv_open'

/root/coreseek-4.1-beta/csft-4.1/src/sphinx.cpp:22310: undefined reference to `libiconv'

/root/coreseek-4.1-beta/csft-4.1/src/sphinx.cpp:22316: undefined reference to `libiconv_close'

collect2: ld returned 1 exit status

make[2]: *** [indexer] Error 1

make[2]: Leaving directory `/root/coreseek-4.1-beta/csft-4.1/src'

make[1]: *** [all] Error 2

make[1]: Leaving directory `/root/coreseek-4.1-beta/csft-4.1/src'

make: *** [all-recursive] Error 1

解決方案:

修改MakeFile檔案

#vi /opt/coreseek-4.1-beta/csft-4.1/src

在157行左右增加一個-liconv參數,将

LIBS = -lm -lexpat -L/usr/local/lib

改成

LIBS = -lm -lexpat -liconv -L/usr/local/lib

4. 建立編輯配置檔案。

# cd /usr/local/coreseek/etc

# cp sphinx-min.conf.dist csft.conf

修改下面内容,MySQ連接配接資訊,其他預設。

source spdb1

{

    type                   = mysql

    sql_host                = localhost

    sql_user                = test

    sql_pass                = mima

    sql_db                  = test

    sql_port                = 3306

    sql_query_pre           = SET NAMES utf8

    sql_query               = SELECT `id`, 1 AS table_id, `username`, `email`, `password` FROM spdb1

    sql_attr_uint           = table_id         #從SQL讀取到的值必須為整數

    #sql_attr_timestamp     = date_added  #從SQL讀取到的值必須為整數,作為時間屬性

    sql_query_info_pre      = SET NAMES utf8                                        #指令行查詢時,設定正确的字元集

    sql_query_info          = SELECT * WHERE ID=$id #指令行查詢時,從資料庫讀取原始資料資訊

}

source spdb2 : spdb1

    sql_query = SELECT `id`, 2 AS table_id, `username`, `email`, `password` FROM spdb2

source spdb3 : spdb1

    sql_query = SELECT `id`, 3 AS table_id, `username`, `email`, `password` FROM spdb3

source spdb4 : spdb1

    sql_query = SELECT `id`, 4 AS table_id, `username`, `email`, `password` FROM spdb4

source spdb5 : spdb1

    sql_query = SELECT `id`, 5 AS table_id, `username`, `email`, `password` FROM spdb5

#index定義

index spdb1

    source            = spdb1    #對應的source名稱

    path              = /usr/local/coreseek/var/data/spdb1 #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...

    docinfo           = extern

    mlock             = 0

    morphology        = none

    min_word_len      = 1

    ondisk_dict       = 1

    html_strip        = 0

    #中文分詞配置,詳情請檢視:http://www.coreseek.cn/products-install/coreseek_mmseg/

    #charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux環境下設定,/符号結尾

    charset_dictpath = /usr/local/mmseg3/etc/ #Windows環境下設定,/符号結尾,最好給出絕對路徑,例如:C:/usr/local/coreseek/etc/...

    charset_type        = zh_cn.utf-8

index spdb2 : spdb1

    source = spdb2

    path =  /usr/local/coreseek/var/data/spdb2

index spdb3 : spdb1

    source = spdb3

    path =  /usr/local/coreseek/var/data/spdb3

index spdb4 : spdb1

    source = spdb4

    path =  /usr/local/coreseek/var/data/spdb4

index spdb5 : spdb1

    source = spdb5

    path =  /usr/local/coreseek/var/data/spdb5

#全局index定義

indexer

    mem_limit            = 200M   #預設32M,不要太大,否則會報錯

#searchd服務定義

searchd

    listen               = 9312   #查詢服務監聽端口,開啟了才會工作

    read_timeout         = 5      #逾時

    max_children         = 30     #最大程序

    max_matches          = 1000   #傳回1000條

    seamless_rotate      = 0

    preopen_indexes      = 0

    unlink_old           = 1

    pid_file = /usr/local/coreseek/var/log/searchd.pid #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...

    log = /usr/local/coreseek/var/log/searchd.log        #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...

    query_log = /usr/local/coreseek/var/log/query.log #請修改為實際使用的絕對路徑,例如:/usr/local/coreseek/var/...

    binlog_path =                                #關閉binlog日志

5. 一些技巧:

rm -rf /usr/local/coreseek/var/data/*.*      //删除已生成的索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --all --rotate //生成所有索引

/usr/local/coreseek/bin/searchd --stop     //停止服務,重新生成前先停止

/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft.conf //啟動searchd服務

/usr/local/coreseek/bin/searchd --status   //檢視狀态

/usr/local/coreseek/bin/search 123456    //本機搜尋

rm -rf /var/lock/subsys/mysqld   //Mysql易鎖,删除鎖定檔案

單獨生成每個表的索引

 /usr/local/coreseek/bin/indexer mydb6 -c /usr/local/coreseek/etc/csft.conf --rotate

 /usr/local/coreseek/bin/indexer mydb7 -c /usr/local/coreseek/etc/csft.conf --rotate  

更新增量索引

/usr/local/coreseek/bin/indexer delta -c /usr/local/coreseek/etc/csft.conf --rotate

合并2個表索引

/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft.conf --merge mydb1 mydb2 --rotate --merge-dst-range deleted 0 0

參考文章:

<a href="http://www.111cn.net/database/mysql/87753.htm" target="_blank">http://www.111cn.net/database/mysql/87753.htm</a>

<a href="http://blog.chinaunix.net/uid-20639775-id-3261834.html" target="_blank">http://blog.chinaunix.net/uid-20639775-id-3261834.html</a>

本文轉自 piazini 51CTO部落格,原文連結:http://blog.51cto.com/wutou/1856189

繼續閱讀