本文主要是介绍sphinx全文索引教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
英文介绍:http://www.sphinxsearch.com/docs/manual-0.9.9.html
一、首先需要在服务器上安装sphinx
在Windows上安装sphinx
D:\sphinx\searchd
--install --config d:\sphinx\sphinx.conf --servicename SphinxSearch
在Linux服务器上安装sphinx
$ tar xzvf sphinx-0.9.8.tar.gz
./configure $ cd sphinx
$ --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql
$ make
$ make install
/usr/local/sphinx-0.9.9/src/sphinx.cpp:20060: undefined reference to `libiconv_open'
libiconv' /usr/local/sphinx-0.9.9/src/sphinx.cpp:20078: undefined reference to `
/usr/local/sphinx-0.9.9/src/sphinx.cpp:20084: undefined reference to `libiconv_close'
: collect2 ld returned 1 exit status
[2]: make *** [indexer] Error 1
[2]: make Leaving directory `/home/jling/sphinx-0.9.9/src'
/home/jling/sphinx-0.9.9/src' make[1]: *** [all] Error 2
make[1]: Leaving directory `
make: *** [all-recursive] Error 1
解决办法:打开configure文件,找到“#define USE_LIBICONV 1”,将注释去掉,并将1改成0。
常见问题2
while error loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
解决办法:
64位系统ln -s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib64/libmysqlclient.so.16
32位系统ln -s /usr/local/webserver/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so.16
sphinx.conf样例
source main
{
= type mysql #数据库类型
= sql_host 10.228.134.211 #数据库ip
= sql_user admin #数据库用户名
= sql_pass admin #数据库密码
= sql_db phpcms_v9 #数据库名
= sql_port 3306 # 数据库端口
sql_query_pre = SET NAMES utf8
= sql_query_pre REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
= sql_query SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \
>=$start AND searchid<=$end WHERE searchid
= sql_query_range SELECT 1,max_doc_id FROM v9_sphinx_counter WHERE counter_id=1
= sql_range_step 5000
#字符串属性设置、需要过滤、排序的时候用到
= sql_attr_uint typeid
= sql_attr_uint siteid
= sql_attr_uint id
= sql_attr_timestamp adddate
= sql_query_info SELECT * FROM v9_search WHERE searchid=$id
}
source delta {
= type mysql #数据库类型
= sql_host 10.228.134.211 #数据库ip
= sql_user admin #数据库用户名
= sql_pass admin #数据库密码
= sql_db phpcms_v9 #数据库名
= sql_port 3306 # 数据库端口
sql_query_pre = SET NAMES utf8
= sql_query SELECT searchid, adddate, siteid, typeid, id, data FROM v9_search \
>( WHERE searchid SELECT max_doc_id FROM v9_sphinx_counter WHERE counter_id=1 )
= sql_query_post REPLACE INTO v9_sphinx_counter SELECT 1, MAX(searchid) FROM v9_search
#字符串属性设置、需要过滤、排序的时候用到
= sql_attr_uint typeid
= sql_attr_uint siteid
= sql_attr_uint id
= sql_attr_timestamp adddate
= sql_query_info SELECT * FROM v9_search WHERE searchid=$id
}
#主索引
{ index main
= source main
# 放索引的目录
= path D:\sphinx\data\main
# 编码
= charset_type utf-8
# 指定utf-8的编码表
= charset_table 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
# 简单分词,只支持0和1,如果要搜索中文,请指定为1
= ngram_len 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
= ngram_chars U+3000..U+2FA1F
}
#增量索引
{ index delta
= source delta
= path D:\sphinx\data\delta
# 编码
= charset_type utf-8
# 指定utf-8的编码表
= charset_table 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
# 简单分词,只支持0和1,如果要搜索中文,请指定为1
= ngram_len 1
# 需要分词的字符,如果要搜索中文,去掉前面的注释
= ngram_chars U+3000..U+2FA1F
}
indexer {
= mem_limit 128M
}
searchd {
= port 9312
= log D:\sphinx\data\phpcms\searchd.log
= query_log D:\sphinx\data\phpcms\query.log
= read_timeout 5
= max_children 30
= pid_file D:\sphinx\data\phpcms\searchd.pid
= max_matches 2000
= seamless_rotate 0
= preopen_indexes 0
= unlink_old 1
}
附件:设置计划任务更新索引
1.windows下
需要设置计划任务
#凌晨4点合并索引,执行merge.bat
#其余时间每分钟更新索引,执行delta.bat
merge.bat
@ECHO off
:\sphinx\bin\indexer.exe D --config D:\sphinx\sphinx.conf --merge main delta --rotate
, echo indexing window will close when complete
delta.bat
@ECHO off
:\sphinx\bin\indexer.exe D --config D:\sphinx\sphinx.conf delta --rotate
, echo indexing window will close when complete
2.linux下编辑定时任务 crontab -e
#凌晨4点合并索引,其余时间每分钟更新索引
* 0-3 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf delta --rotate
* 6-23 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf delta --rotate
0 4 * * * /usr/local/sphinx/bin/indexer --config /usr/local/sphinx/etc/sphinx.conf --merge main delta --rotate
各种路径、权限需要应用所在服务器一致,如:
sphinx.conf 中需要配置
sql_host 数据库主机地址
sql_user 数据库用户名
sql_pass 数据库密码
sql_db 数据库名
sql_port 数据库端口
phpcms表前缀样例中为phpcms_
索引路径 D:\sphinx\data\delta
phpcmsv9_withsphinx.zip
文章来源:
这篇关于sphinx全文索引教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!