Sphinx是一個基於SQL的全文檢索引擎,可以結合MySQL,PostgreSQL做全文搜索,它可以提供比數據庫本身更專業的搜索功能,使得應用 程序更容易實現專業化的全文檢索。Sphinx特別為一些腳本語言設計搜索API接口,如PHP,Python,Perl,Ruby等,同時為MySQL 也設計了一個存儲引擎插件。
我要使用Sphinx需要做以下幾件事:
1)、首先得有數據
2)、建立Sphinx配置文件
3)、生成索引
4)、啟動Sphinx
5)、php操作使用之(調用api或search.exe程序進行查詢)
具體搭建步驟:
先下載好sphinx的壓縮包。
1、更新依賴包以及安裝編譯環境
mount /dev/cdrom /media/cdrom #先掛載
yum -y install m4 autoconf automake libtool
yum -y install gcc gcc-c++ wget
yum -y install mysql-devel
(以上是需要的編譯環境,如果有就不用重新安了,建議重新安,否則不知道那些已經安裝)
2、下載coreseek -3.2.14.tar.gz(這是一個中文分詞插件壓縮包)
tar xzvf 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
3、安裝csft-3.2.14
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
vi src/sphinxexpr.cpp
直接修改文件的1746, 1777和1823行,然后將所有的T val = ExprEval ( this->m_pArg, tMatch ).....修改為T val = this->ExprEval ( this->m_pArg, tMatch )
make
make install
進入配置目錄通過命令ls可以看到3個文件
example.sql sphinx.conf.dist sphinx-min.conf.dist
其中example.sql是示例sql腳本我們將其導入到數據庫中的test數據庫中作為測試數據(會創建兩張表 documents和tags)
---------------
4、配置文件更改:
vi /usr/local/coreseek/etc/sphinx.conf
輸入以下內容
source main_src
{
type = mysql
sql_host = 192.168.1.70 #查詢的服務器ip地址
sql_user = root #用戶名
sql_pass =root # 密碼
sql_db =test #使用的數據庫
sql_port = 3306 # 數據庫端口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 #數據源配置核心語句,sphinx使用此語句從數據庫中拉取數據
sql_attr_uint = group_id
sql_attr_timestamp = date_added
sql_query_info = SELECT * FROM documents WHERE id=$id #設置命令行下返回的信息。
}
index main #索引名稱
{
source = main_src #數據源名稱
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
}
說明:
代碼段source main_src{***} 代表數據源里面主要包含了數據庫的配置信息,main_src表示數據源名字,可以隨便寫。
代碼段index main{***} 代表為哪個數據源創建索引,與source *** 是成對出現的,其中的source參數的值必須是某一個數據源的名字。
其他參數可以查看手冊,這里不再贅述。
生成索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf --all #--all表示生成所有主、增索引,也可寫單獨的索引名稱
啟動命令
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/sphinx.conf
執行后可以在/usr/local/coreseek/var/data目錄中看到多出一些文件,是以索引名為文件名的不同的擴展名的文件
在不啟動sphinx的情況下即可測試命令:
/usr/local/coreseek/bin/search -c /usr/local/coreseek/etc/sphinx.conf 中國
以上就算sphinx搭建完成了,一般會配置增量索引,與主索引搭配。