安裝前首先安裝依賴的軟件包php
yum
install
make
gcc g++ gcc-c++ libtool autoconf automake imake libxml2-devel expat-devel
html
在Linux、BSD上安裝Sphinx/Coreseekpython
$ wget http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.1-beta.tar.gz
mysql
將你下載的tar包解壓,並進入coreseek 子目錄:linux
$ tar xzvf coreseek-3.2.14.tar.gz
$ cd coreseekc++
一、首先安裝MMSeg:web
$ cd mmsegsql
$ ./bootstrap數據庫
$ ./configure --prefix=/usr/local/mmsegbootstrap
$ make
$ 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
$ ./configure --prefix=/usr/local/mmseg
$ make
$ make install
$ cd ../
二、運行配置 程序:
$ cd csft-4.1
$ yum install mysql-devel libxml2-devel expat expat-devel 支持MySQL數據源
$ /sh buildconf.sh
$ ./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg/lib/ --with-mysql-includes=/alidata/server/mysql-5.6.21/include --with-mysql-libs=/alidata/server/mysql-5.6.21/lib
configure程序有不少運行選項。完整的列表能夠經過使用 --help 開關獲得。最重要的以下:
--prefix, 定義將Coreseek安裝到何處;好比 --prefix=/usr/local/coreseek (如下所有示例都假定Coreseek安裝在這個位置)
--with-mysql, 當自動檢測失敗時,指出在那裏能找到MySQL 頭文件和庫文件;
--with-pgsql, 指出在那裏能找到PostgreSQL頭文件和庫文件.
--with-mmseg, 啓用基於MMSeg的中文分詞法,並指出在那裏能找到MMSeg頭文件和庫文件.
--with-python, 啓用Python數據源支持. 須要預先安裝Python2.6.
編譯源代碼生成二進制程序:
$ make
出現undefined reference to `libiconv'的相似錯誤,能夠按照以下方法處理:
##方法一:(Linux使用)
## 直接執行:export LIBS="-liconv"
##而後make clean,再次configure後,進行編譯安裝make && make install
## 方法二:
## 首先configure,而後vim src/makefile
## 在其中搜索lexpat,在其後加上 -liconv
## 修改後該行應該爲:-lexpat -liconv -L/usr/local/lib
## 而後再次make && make install
安裝二進制程序到你設定的目錄下: (類Unix操做系統下默認爲 /usr/local/bin/ , 可是能夠被 configure --prefix) 修改安裝目錄
$ make install
$ cd ../
##中文分詞測試,若是顯示不正常,請檢查當前環境下的locale和UTF-8中文字符顯示設置
$ /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc src/t1.txt
中文/x 分/x 詞/x 測試/x
中國人/x 上海市/x
若發現錯誤
error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
解決方式
cd /etc
ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
ldconfig
##如下爲正常狀況下的提示信息:
Coreseek Fulltext 3.2 [ Sphinx 0.9.9-release (r2117)]
Copyright (c) 2007-2010,
Beijing Choice Software Technologies Inc (http://www.coreseek.com)
出現/usr/local/coreseek/bin/indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory的相似錯誤,能夠按照以下方法處理:
##方法一:
## vi /etc/ld.so.conf
## 將下面這句加到文件到尾部,並保存文件 /alidata/server/mysql-5.6.21/lib
## ldconfig
## 方法二:
## locate libmysqlclient #運行該命令找到關於libmysqlclient.so.18的文件
## ln -s /alidata/server/mysql-5.6.21/lib/libmysqlclient.so.18 /usr/bin/libmysqlclient.so.18
建立配置sphinx與mysql的配置文件
# vi /usr/local/coreseek/etc/csft_mysql.conf
數據表字段取值對應到Coreseek的索引中,其關係以下: 數據庫: SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, score, title, content FROM documents id : 自增字段,表的主鍵,整數 group_id : 整數字段 date_added : 整數字段,使用UNIX_TIMESTAMP可將datetime類型轉換爲整數的timestamp score : 浮點數字段 title : 字符串字段 content : 文本字段 業務分析: 文檔編號:id 查詢過濾:分組(group_id),時間(date_added),score 全文檢索:title、content Coreseek索引配置: id :ID屬性,必須提供,在SQL語句中字段名稱不限 對應SQL查詢的第一個字段,系統自動使用,內部屬性名爲@id,不須要也不能在配置中設定 使用SetFilter()過濾,或者使用SetIDRange()過濾; SphinxSE之中,使用filter或者minid, maxid過濾 sql_attr_uint :整數屬性,以上group_id、date_added均可用此設置,使用SetFilter()過濾, 或者使用SetFilterRange()過濾; SphinxSE之中,使用filter或者range過濾; sql_attr_float :浮點數屬性,以上score可用此設置,使用SetFilterFloatRange()進行範圍過濾, SphinxSE之中,使用range過濾; sql_attr_timestamp:timestamp屬性,整數,以上date_added可用此設置,可用SetFilter()過濾 或者使用SetFilterRange()過濾; SphinxSE之中,使用filter或者range過濾 sql_attr_str2ordinal:字符串序列屬性,以上title可用此設置,僅用於根據該字段排序 可是設置後,該屬性不可用於過濾,也不會保存實際字符串內容,更不能全文檢索 搜索結果中,其對應的信息爲整數,由系統計算出來的排序序列值 全文檢索字段 :全文檢索字段,以上title、content等字符串或者文本的字段均可用此設置 任何出如今SQL語句中,既不是ID屬性,也沒有使用「sql_attr_類型」設置的字段,都是全文字段, 使用Query()搜索; SphinxSE之中,使用query的查詢文本進行搜索 其餘更詳細和豐富的類型,請前往中文手冊瞭解。
#MySQL數據源配置,詳情請查看:http://www.coreseek.cn/products-install/mysql/ #請先將var/test/documents.sql導入數據庫,並配置好如下的MySQL用戶密碼數據庫 #源定義 source main { type = mysql sql_host = localhost sql_user = didiphp sql_pass = DotDeeMy365com sql_db = new_didi sql_port = 3306 sql_query_pre = SET NAMES utf8 sql_query = SELECT id, brand_id, seller_id, UNIX_TIMESTAMP(create_time) AS create_time, name, sell_price, market_price, cost_price, store_nums, img, ad_img, content, keywords, description, search_words, visit, favorite, comments, sale, detail, postage, postage_add FROM mall_goods #sql_query第一列id需爲整數 #name、content做爲字符串/文本字段,被全文索引 sql_attr_uint = brand_id #從SQL讀取到的值必須爲整數 sql_attr_timestamp = create_time #從SQL讀取到的值必須爲整數,做爲時間屬性 sql_query_info_pre = SET NAMES utf8 #命令行查詢時,設置正確的字符集 sql_query_info = SELECT id, brand_id, seller_id, UNIX_TIMESTAMP(create_time) AS create_time, name, sell_price, market_price, cost_price, store_nums, img, ad_img, content, keywords, description, search_words, visit, favorite, comments, sale, detail, postage, postage_add FROM mall_goods WHERE id=$id #命令行查詢時,從數據庫讀取原始數據信息 } #index定義 index main { source = main #對應的source名稱 path = /usr/local/coreseek/var/data/mysql #請修改成實際使用的絕對路徑,例如:/usr/local/coreseek/var/... docinfo = extern mlock = 0 morphology = none min_word_len = 1 html_strip = 0 #中文分詞配置,詳情請查看:http://www.coreseek.cn/products-install/coreseek_mmseg/ charset_dictpath = /usr/local/mmseg/etc/ #BSD、Linux環境下設置,/符號結尾 #charset_dictpath = etc/ #Windows環境下設置,/符號結尾,最好給出絕對路徑,例如:C:/usr/local/coreseek/etc/... charset_type = zh_cn.utf-8 } #全局index定義 indexer { mem_limit = 128M } #searchd服務定義 searchd { listen = 9312 read_timeout = 5 max_children = 30 max_matches = 1000 seamless_rotate = 0 preopen_indexes = 0 unlink_old = 1 pid_file = /usr/local/coreseek/var/log/searchd_mysql.pid #請修改成實際使用的絕對路徑,例如:/usr/local/coreseek/var/... log = /usr/local/coreseek/var/log/searchd_mysql.log #請修改成實際使用的絕對路徑,例如:/usr/local/coreseek/var/... query_log = /usr/local/coreseek/var/log/query_mysql.log #請修改成實際使用的絕對路徑,例如:/usr/local/coreseek/var/... binlog_path = #關閉binlog日誌 }
調用命令列表:
啓動後臺服務(必須開啓)
# /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf
若是報錯
WARNING: index 'mysql': preload: failed to open var/data/mysql.sph: No such file or directory; NOT SERVING
FATAL: no valid indexes to serve
解決
新創建索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all
更改
mysql的問題 stock路徑問題,須要在my.cnf更改 /var/lib/mysql/mysql.sock
vim /etc/my.cnf
#socket = /tmp/mysql.sock
socket = /var/lib/mysql/mysql.sock
防火牆問題 關閉防火牆
啓動
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf
保證跨機器訪問,關閉防火牆
service iptables stop
執行索引(查詢、測試前必須執行一次)
# /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate
執行增量索引
# /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf delta --rotate
合併索引
# /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate --merge-dst-range deleted 0 0
(爲了防止多個關鍵字指向同一個文檔加上--merge-dst-range deleted 0 0)
後臺服務測試
# /usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/csft_mysql.conf aaa
關閉後臺服務
# /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf --stop
自動化命令:
crontab -e
*/1 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf delta --rotate
*/5 * * * * /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --merge main delta --rotate --merge-dst-range deleted 0 0
30 1 * * * /bin/sh /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate
如下任務計劃的意思是:每隔一分鐘執行一遍增量索引,每五分鐘執行一遍合併索引,天天1:30執行總體索引