sphinx做增量索引更新合并

在利用 Sphinx 做搜索引擎的时候,一般他的索引建立构成有如下几个部分:
  1. 固定不变的主索引
  2. 增量索引重建
  3. 索引数据合并

在实际操作中,需要为增量索引的建立创建辅助表,这样才可以记住最后建立索引的记录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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值