準備爲以前說的電商系統作一個功能完善搜索功能,個人需求是關鍵字相關搜索,搜索結果多樣化排序,根據用戶搜索記錄爲用戶提供最優搜索結果。在網上看了好多,看來看去感受Coreseek還不錯。Coreseek是一個基於Sphinx二次開發的搜索工具,屬於國內出品,有完善的中文文檔。廢話很少說,這篇是Coreseek安裝篇,廢了我很多勁。html
Sphinx是一個獨立的全文搜索引擎;而Coreseek是一個支持中文的全文搜索引擎,意圖爲其餘應用提供高速、低空間佔用、高相關度結果的中文全文搜索能力。CoreSeek/Sphinx能夠很是容易的與SQL數據庫和腳本語言集成。python
應用程序能夠經過三種不一樣的接口方式來與Sphinx搜索服務(searchd)通訊: a) 經過原生的搜索 API (SphinxAPI), b) 經過Sphinx自身支持的MySQL網絡協議 (使用命名爲SphinxQL的SQL精簡子集), 或者 c) 經過MySQL 服務端的存儲插件引擎(SphinxSE)。固然, 還能夠經過可使用 a)、b)、c) 的應用程序來構建webservice來爲其餘應用程序提供通訊mysql
在Sphinx發行版本中提供的原生搜索API支持PHP、Python、Perl、Rudy和Java。搜索API很是輕量化,能夠在幾個小時以內移植到新的語言上。第三方API接口和插件提供了對Perl、C#、Haskell、Ruby-on-Rails支持,以及對其餘可能的語言或者框架的支持。linux
從版本1.10-beta開始,Sphinx支持兩種不一樣的索引後端:「磁盤(disk)」索引後端和「實時索引(realtime)」(RT)索引後端。磁盤索引支持在線全文索引重建,可是僅支持非文本(屬性)數據的在線更新。RT實時索引在此基礎上,又增長了在線的全文索引更新。在此以前的版本僅支持磁盤索引。web
使用命名爲數據源的接口,數據能夠被加載到磁盤索引。當前系統內置MySQL和PostgreSQL以及ODBC兼容(MS SQL、Oracle等) 數據庫數據源的支持,也支持從管道標準輸入讀取特定格式的XML數據。經過適當修改源代碼,用戶能夠自行增長新的數據源驅動(例如:對其餘類型的DBMS的原生支持)。在Coreseek發行的版本中,用戶還可使用Python腳本做爲數據源來獲取任何已知世界和未知世界的數據,這極大的擴展了數據源的來源。從1.10-beta版本開始的RT實時索引,只能使用MySQL接口經過SphinxQL來操做。sql
<!--more-->數據庫
系統環境:Ubuntu15.10bootstrap
Coreseek-4.1-beta:下載地址後端
軟件依賴:gcc g++ automake libtool mysql-client libmysqlclient-dev libxml2-dev libexpat1-dev mysql-server-5.6網絡
libiconv:下載地址
首先把存在Ubuntu軟件源的依賴裝上:
sudo apt-get install gcc g++ automake libtool mysql-client libmysqlclient-dev libxml2-dev libexpat1-dev mysql-server-5.6
解壓Coreseek
tar -xvf coreseek-4.1-beta.tar.gz
安裝mmseg
cd mmseg-3.2.14 // 編輯 ./bootstrap ./configure --prefix=/usr/local/mmseg3 sudo make && sudo make install
測試分詞軟件(mmseg)是否安裝成功
cd /usr/local/mmseg3/bin ./mmseg -d /usr/local/mmseg3/etc/ /usr/local/src/coreseek-4.1-beta/mmseg-3.2.14/src/t1.txt
安裝libiconv
tar xvf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure make && sudo make install && ldconfig
若是你的glibc版本在2.16以上,make時頗有可能出現以下錯誤
In file included from progname.c:26:0: ./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function) _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ^
參考這裏的方法,下載patch文件,解壓後打上patch便可。
wget -O - http://blog.atime.me/static/resource/libiconv-glibc-2.16.patch.gz | gzip -d - | patch -p0
安裝csft
更改configure.ac文件,將
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
改成
AM_INIT_AUTOMAKE([-Wall foreign])
編譯:
cd csft-4.1 automake --add-missing sh buildconf.sh ./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 --with-python LIBS=-liconv
若是你的gcc版本在4.7以上,編譯的時候可能會由於sphinx的一個bug報錯,解決方法參考bug報告裏的一個patch,在csft-4.1目錄下執行:
wget -O - http://blog.atime.me/static/resource/sphinxexpr-gcc4.7.patch.gz | gzip -d - | patch -p0
而後執行:
make -j4 #-j4表示使用4覈編譯 sudo make install
搞定!
將csft-4.1/contrib/scripts目錄下的searchd腳本拷貝到/etc/init.d/目錄下,便可使用service命令啓動和終止searchd服務。
安裝好coreseek後,將/usr/local/coreseek/share/man/目錄下的全部文件和目錄都拷貝到/usr/local/share/man/目錄裏,便可使用man命令查看indexer和searchd的使用手冊。
安裝完成,而後去/usr/local/coreseek/bin執行searchd提示:
./searchd: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
緣由是動態連接庫未找到__解決方法:__
在/etc/ld.so.conf中加一行/usr/local/lib,運行ldconfig。ld.so.conf和ldconfig是維護系統動態連接庫的。