Coreseek:区段查询及增量索引代替实时索引

来源:互联网 发布:粘土淘宝 编辑:程序博客网 时间:2024/04/30 07:13

1.区段查询

索引系统需要通过主查询来获取全部的文档信息,一种简单的实现是将整个表的数据读入内存,但是这可能导致整个表被锁定并使得其他操作被阻止(例如:在MyISAM格式上的INSERT操作),同时,将浪费大量内存用于存储查询结果,诸如此类的问题吧。 为了避免出现这种情况,CoreSeek/Sphinx支持一种被称为 区段查询的技术. 首先,CoreSeek/Sphinx从数据库中取出文档ID的最小值和最大值,将由最大值和最小值定义自然数区间分成若干份,一次获取数据,建立索引。现举例如下:

sql_query_range= SELECT MIN(id),MAX(id) FROM documentssql_range_step = 1000sql_query = SELECT * FROM documents WHERE id>=$start AND id<=$end
只要在配置文件里面写三条语句即可

from后面要跟的是你数据库里面的表名,如这里的表就是document

2.增量索引代替实时索引

有这么一种常见的情况:整个数据集非常大,以至于难于经常性的重建索引,但是每次新增的记录却相当地少。一个典型的例子是:一个论坛有1000000个已经归档的帖子,但每天只有1000个新帖子。

在这种情况下可以用所谓的“主索引+增量索引”(main+delta)模式来实现“近实时”的索引更新。

这种方法的基本思路是设置两个数据源和两个索引,对很少更新或根本不更新的数据建立主索引,而对新增文档建立增量索引。在上述例子中,那1000000个已经归档的帖子放在主索引中,而每天新增的1000个帖子则放在增量索引中。增量索引更新的频率可以非常快,而文档可以在出现几分种内就可以被检索到。

确定具体某一文档的分属那个索引的分类工作可以自动完成。一个可选的方案是,建立一个计数表,记录将文档集分成两部分的那个文档ID,而每次重新构建主索引时,这个表都会被更新。

分辨要在mysql里建表,然后修改配置文件

# in MySQLCREATE TABLE sph_counter(    counter_id INTEGER PRIMARY KEY NOT NULL,    max_doc_id INTEGER NOT NULL);# in sphinx.confsource main{    # ...    sql_query_pre = SET NAMES utf8    sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents    sql_query = SELECT id, title, body FROM documents \        WHERE id<span style="color:#ff0000;"><=</span>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )}source delta : main{    sql_query_pre = SET NAMES utf8    sql_query = SELECT id, title, body FROM documents \        WHERE id<span style="color:#ff0000;">></span>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )}index main{    source = main    path = /path/to/main    # ... all the other settings}# note how all other settings are copied from main,# but source and path are overridden (they MUST be)index delta : main{    source = delta    path = /path/to/delta}

写好之后,还要写两个批处理文件,一个做增量索引,一个合并索引。

增量索引:g:/service/coreseek/bin/indexer  -c g:/service/coreseek/etc/csft_mysql.conf   --rotate main_delta

合并索引:g:/service/coreseek/bin/indexer  -c g:/service/coreseek/etc/csft_mysql.conf  --merge main main_delta --rotate 

写好之后,再将两者放入到任务计划里,差不多5分钟做一次增量索引,每天1点半时候做一次主索引

0 0
原创粉丝点击