在Sphinx+LibMMSeg搭建中文全文搜索引擎_安装配置中安装试验了Sphinx 的使用,但是还有几方面的问题有待处理。
- 用来建立索引的分词数据
- 动态增量索引更新
- 索引在前端的界面的表现使用
本篇主要是对动态增量更新的一些研究。关于分词数据的建立和前端界面的控制将在以后研究。
在利用 Sphinx 做搜索引擎的时候,一般他的索引建立构成有如下几个部分:
- 固定不变的主索引
- 增量索引重建
- 索引数据合并
在实际操作中,需要为增量索引的建立创建辅助表,这样才可以记住最后建立索引的记录ID,做实际的增量部分的索引建立。
1、创建辅助表
CREATE TABLE `sph_counter` (
`counter_id` int(11) NOT NULL,
`max_doc_id` int(11) NOT NULL,
PRIMARY KEY (`counter_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
2、在主索引的数据源中作如下方式的取数据设置
#源定义
source mysql
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass = root
sql_db = test
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents
sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents WHERE id<=(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)
sql_attr_uint = group_id
sql_attr_timestamp = date_added
sql_query_info = SELECT * FROM documents WHERE id=$id
}
3、在增量索引的数据源中作如下方式的取数据设置,需要注意的是sql_query_pre要和主索引数量相同,不然查询结果不是想要的内容
#增量索引 源定义
source delta:mysql{
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
sql_query_pre =
sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content FROM documents WHERE id>(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)
}
4、主索引index定义配置如下
#index定义
index mysql
{
source = mysql #对应的source名称
path = /usr/local/coreseek/var/data/ #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/…
docinfo = extern
mlock = 0
morphology = none
min_word_len = 1
html_strip = 0
charset_dictpath = /usr/local/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
#charset_dictpath = etc/
charset_type = zh_cn.utf-8
}
5、增量索引index定义配置如下
#增量索引 index定义
index delta:mysql{
source = delta
path = /usr/local/coreseek/var/data/delta/
charset_dictpath = /usr/local/mmseg3/etc/
charset_type = zh_cn.utf-8
}
6、创建更新所有索引
$sudo /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/dict/csft_mysql.conf –all –rotate
如果配置正确的话,现在辅助表sph_counter中已经添加了一条数据
7、更新增量索引
$sudo /usr/local/coreseek/bin/indexer delta -c /usr/local/coreseek/dict/csft_mysql.conf –rotate
8、合并增量索引到主索引
$sudo /usr/local/coreseek/bin/indexer –merge -c /usr/local/coreseek/dict/csft_mysql.conf –rotate
9、启动sphinx的守护进程searchd
$sudo /usr/local/coreseek/bin/searchd -c /usr/local/coreseek/dict/csft_mysql.conf