编辑,修改
三, 修改Coreseek配置文件
以我自己的配置文件为例:
/usr/local/coreseek/etc/csft_mysql.conf
#索引源定义
source mysql
{
type = mysql
sql_host = localhost
sql_user =xxxx
sql_pass =xxxx
sql_db =xxxx
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id,id,uid,title,data FROM notebook_notepad
#sql_query第一列id需为整数
#title、data作为字符串/文本字段,被全文索引
sql_attr_uint = id #从SQL读取到的值必须为整数
#sql_attr_timestamp = time #从SQL读取到的值必须为整数,作为时间属性
sql_attr_uint = uid
sql_query_info_pre = SET NAMES utf8 #命令行查询时,设置正确的字符集
sql_query_info = SELECT * FROM notebook_notepad WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}
#index定义
index mysql
{
source = mysql #对应的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/mmseg3/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/...
}
这样搜索的话就会从索引文件中查出id,uid,title,data字段。
OK,配置完成以后,重启Coreseek 服务就能从生产你想要的查询索引,以后你就可以摆脱mysql的桎梏,什么中文,英文都可以,还自带分词。怎么样,是不是打开了新世界的大门。
下面讲一下重建索引可能出错的地方,以及解决办法。有兴趣的同学看一下,否则可以跳到下一节:PHP测试Coreseek 。
重建索引时报错误:WARNING: failed to open pid_file '/usr/local/coreseek/var/log/searchd_mysql.pid'.
解决方法:
试着停止一下coreseek服务
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf --stop 停止服务
然后重启
/usr/local/coreseek/bin/searchd -c /usr/local/coreseek/etc/csft_mysql.conf 启动服务
再次建立索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all 建立索引
如果提示:FATAL: failed to lock /usr/local/coreseek/var/data/xxxx.spl: Resource temporarily unavailable, will not index. Try --rotate option.
则尝试重建索引
/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/csft_mysql.conf --all --rotate 重建索引
四, PHP测试Coreseek
1,将sphinxapi.php放到测试目录下
cp /usr/local/src/coreseek-3.2.14/testpack/api/sphinxapi.php ./
vim test.php
header("Content-type: text/html; charset=utf-8");
//require("./ ");
$s = new SphinxClient;
$s->setServer("127.0.0.1", 9312);
//SPH_MATCH_ALL, 匹配所有查询词(默认模式); SPH_MATCH_ANY, 匹配查询词中的任意一个; SPH_MATCH_EXTENDED2, 支持特殊运算符查询
$s->setMatchMode(SPH_MATCH_ALL);
$s->setMaxQueryTime(30); //设置最大搜索时间
$s->SetArrayResult(false); //是否将Matches的key用ID代替
$s->SetSelect ( "*" ); //设置返回信息的内容,等同于SQL
$s->SetRankingMode(SPH_RANK_BM25);
$s->SetLimits ( 0, 30, 1000, 0 ); //设置结果集偏移量 SetLimits
$res = $s->query('coreseek','mysql','--si