sphinx增量索引

本文介绍了在Sphinx搜索引擎中处理增加、修改和删除记录时的增量索引操作。包括新增记录时如何为增量数据源建立索引,修改记录后的重新索引,以及删除记录时从索引中移除相应记录的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们第一次使用indexer为表中内容建立索引后,当前表中内容都可以通过sphinxapi查询到。但是,当我们增加记录后,sphinx还未为增加的记录建立索引;修改记录后,应该为修改后记录重新建立索引;删除记录后,应该从索引文件中将该记录删除。以下,本文分别介绍这三种情况的处理方法。

增加记录

我们可以建立一张表,专门用于存放已经建立索引的最大主键id值;比如:第一次建立索引后,记录数据库表中最大id为max_id=100,当向数据库中添加10条新纪录后,数据库表中最大主键id变为了110。因此,我们只需要为大于max_id的这10条记录建立索引。
为此,我们可以再配置一个数据源和一个索引,定期执行,用于为新增记录建立索引。

新加一个表:

//记录已更新记录的最大id
create table rain_newszl
(
 max_id int unsigned
);

增量数据源和索引定义

#新闻增量数据源
source news_zl
{
	type			= mysql
	sql_host		=localhost
	sql_user		=root
	sql_pass		=root
	sql_db			=rain
	sql_port		=3306
	sql_query_pre	=SET NAMES utf8

	#从数据库表查询id大于max_id的记录,以及修改记录表rain_newsupdate中所有记录,为其建立索引
	sql_query		= select id,title,content from rain_news where id > (select max_id from rain_newszl) 
	
	#将rain_newszl表中记录的值更改为最大的id
	sql_query_post	= update rain_newszl set max_id = (select id from rain_news order by id desc limit 1)
	
}
index news_zl
{
	source			=news_zl
	path			=D:\wamp\coreseek\var\data\newszl
	docinfo			=extern
	mlock			=0
	morphology		=none
	min_word_len	=1
	html_strip		=0
	charset_dictpath	=D:\wamp\coreseek\etc
	charset_type	=zh_cn.utf-8
}

在命令行执行下面两个命令:

D:\wamp\coreseek\bin\indexer.exe   -c    D:\wamp\coreseek\etc\sphinx.conf   news_zl --rotate //为增量记录建立索引

D:\wamp\coreseek\bin\indexer.exe   -c    D:\wamp\coreseek\etc\sphinx.conf  --merge  news  news_zl --rotate //将增量索引和原索引合并

增量索引通过上面三个步骤就可以完成。

修改记录

为修改的记录重新建立索引,同增加记录一样,需要新建一个表,存储修改记录的id,再为该表中所有记录重新建立索引,合并到原索引文件中。也分为三个步骤,这里在增加记录的基础上进行修改。

建表

//记录修改的id
create table rain_newsupdate
(
id  int unsigned
)engine=innodb charset=utf8;

修改配置文件

命令行执行跟增加记录中一样,没有修改

删除记录

对于删除记录,就要修改四处位置。

数据库表

在表中添加一列isdeleted,用于标识记录是否删除(其实在数据库中,该列没什么用处,主要是在sphinx索引文件中作为属性使用)
alter table rain_news add column isdeleted int default 0;

配置文件

在原配置文件和增量配置文件中都要添加这句话sql_attr_uint = isdeteled(在索引文件中声明isdeleted是一个属性,可以进行过滤),同时查询语句中也要添加该字段。

命令行执行语句也要修改

D:\wamp\coreseek\bin\indexer.exe   -c    D:\wamp\coreseek\etc\sphinx.conf   news_zl --rotate
D:\wamp\coreseek\bin\indexer.exe   -c    D:\wamp\coreseek\etc\sphinx.conf  --merge  news  news_zl  --merge-dst-range isdeleted 0 0 --rotate
//这里--merge-dst-range 前面有介绍

程序修改

在删除记录时,要更新索引文件中相应记录的isdeleted属性,将值修改为1;

从sphinx中查询带关键词记录id集合时,需要设置过滤,只匹配isdeleted为0的记录;
到此为止,增加、修改、删除记录的索引文件更新都已经完成,对于命令行的命令,可以新建一个批处理,定时执行即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值