msgbartop
better late than never
msgbarbottom

Aug 26 coreseek索引更新机制

= =,昨晚太晚睡觉,所以日记又没写。结果现在又不太记得昨天做了啥了。

还是先说今天吧。

今天的时间都花在coreseek的索引更新机制上了,原来是每隔一分钟更新增量索引,每天再重建一次索引。sph_counter 中存放区分主索引和增量索引的maxid。现在的方法,依旧是每分钟更新增量索引,但是重建索引改成合并,将增量索引合并到主索引中,并更改sph_counter中的maxid值,清空增量索引。搜索则都是同时从两个索引中搜索。

这个可是折腾了大半天才得出来的结果,合并索引不难。

其他两个都有问题,先说下今天碰到的情况。

先是更新sph_counter的maxid值,这个时候还没有考虑到清空增量索引,所以合并索引这步暂时是没有问题的,而合并索引后,再更新增量索引,还会得到第一次建立索引后的所有增量,因为没有改变maxid,后来在coreseek.cn上看到有人提到sql_query_post_index,可以更新增量索引后改变maxid值,于是在增量index中加入了这个选项,= =开始是手工更新增量索引,合并到主索引,这两步一起做,没有问题,后来用crontab才发现,增量索引每更新一次,前面的记录都会丢失,因为这些记录还没有合并到主索引就被更新的增量索引覆盖了。这个方法行不通,后来问了神仙,= =,原来脚本也可以更改数据表中的值,请教了一下,此问题解决。说完另一个问题,一起贴最终的脚本内容。

合并索引后,清空增量索引,到底怎么个清空法是个问题,开始的想法是直接删除增量索引文件,删除后加–rotate,更新增量索引会出错,出错信息好像是没有增量索引的文件吧。后来听神仙说,要去掉–rotate,没有出错,可是后面的每分钟更新增量索引会有问题,看了一下索引文件,只要加了–rotate的,生成的增量索引文件是delta_new.*,这样,虽然增量索引更新成功,却搜索不要更新的记录。如果不加–rotate,索引文件正常,但是依旧搜索不到新记录。后来不知怎的一想,不用删除索引文件,因为前面的maxid值已经改变了,直接更新增量索引不也可以么,试了一下,果然。

下面整个的贴一下代码。

1、首先是建立索引
/usr/local/coreseek/bin/indexer –all –config /data/coreseek/conf/post.conf

2、启动守护进程
/usr/local/coreseek/bin/searchd –config /data/coreseek/conf/post.conf

3、+记录

4、更新增量索引,这个写在脚本里,因为需要每分钟更新。
文件名:/data/coreseek/sh/build_delta_index.sh
内容:/usr/local/coreseek/bin/indexer post_delta –config /data/coreseek/conf/post.conf –rotate

5、合并索引,这个也要写在脚本里,每天合并一次
文件名:/data/coreseek/sh/build_main_index.sh
内容:/usr/local/coreseek/bin/indexer –merge post_main post_delta –rotate –config /data/coreseek/conf/post.conf  //合并索引
/usr/local/mysql/bin/mysql -hhostname -uusername -ppassword -Ddbname -e ‘REPLACE INTO sph_counter SELECT 1, MAX(PostId) FROM Post’ //更改maxid
/usr/local/coreseek/bin/indexer post_delta –config /data/coreseek/conf/post.conf –rotate >>/var/log/coreseek/deltaindexlog //重建增量索引

再贴下crontab规则
*/1 * * * * /bin/sh /data/coreseek/sh/build_delta_index.sh
30 1 * * * /bin/sh /data/coreseek/sh/build_main_index.sh
这个基本上是没有问题了,冏,要是再有问题,我真不想碰了。

昨天跟今天的其他时间应该是在写demo吧,= =,不想自己写页面,直接从coreseek.cn上扒下来的,居然是table,现在基本实现的功能,高亮这块还要做一下,真想说,sphinx真是个BT!搜索结果只返回id,BuildExcerpts这个用来产生文档片段的方法,我就更不说啥了。刚看文档看到UpdateAttributes,我居然还没处理,冏啊冏。

这两天差不多都干这些了。文档还木有写,木时间了,分词的话,只能用词库了。



Leave a Comment




*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word