全文检索coreseek的增量索引的介绍

资源类型: 技术文章 语言类型: WEB开发 发布时间: 2016-06-13 20:58:10

更新时间:2017-01-16 15:44:17 发布者:ykswz(ykswz) 207

今天来对全文检索coreseek的增量索引做一个介绍。对于coreseek不知道是何物的朋友们,这篇文章不是为您准备的哦。本文,我们主要简单来对coreseek的增量索引做一个简单的介绍。简单来讲,coreseek的增量索引就是为了让我们不必要全量更新整个数据的索引内容。我们这篇文章,不仅仅告诉您如何做一个简单的增量索引的配置,同时会告诉您,利用一个简单的小技巧,让您把生成增量索引的脚本运行的更加迅速哦。

我们通常会用下面的方式进行生成一个增量索引。

/usr/local/coreseek/bin/indexer delta --rotate


当然这里,我们假设了您配置的增量索引的名称是delta,并且您的coreseek的搜索服务searched是开启状态的。所以我们这里用了 --rotate选项哦。如果您的searchd是未开启状态。就省略掉 --rotate参数就可以了。

当然,我们可以看到,上面的命令只是把增量索引进行生成而已。如何把生成的增量索引合并到主索引里面呢?其实也非常简单,相信聪明的您一定已经想到了吧。

/usr/local/coreseek/bin/indexer --merge main delta  --rotate



那么我们今天这篇文章就这么结束了吗?当然没有了哦,我们不是说了有一个小小的技巧吗?这才是我们今天要说明的重点内容。

其中这里我们假定main是主索引,delta是增量索引哦。这一切看着都没有问题,我也是这么去做的。但是如果你发现,当你的数据量达到比较大的一个级别的时候,会发现merge其实正如官方文档说道的那样,它也不是一触而就的哦。需要一定的执行的时间的哦。当然这一点上也无可厚非,毕竟数据量大了,合并总是需要执行时间的哦。问题在于,如果你的生成的delta没有记录。那么如果你执行merge,同样需要执行时间哦。这一点,我相信大家就无法忍受了吧。至少我是这样的感觉的哦。因为如果delta没有产生记录的话,就说明,没有增量索引的记录,那么理论来说,我们应该让系统不进行任何的合并操作的。

可惜的是,通过邮件咨询了官方honestqiao@coreseek.com之后,大师也很快给予了回复。
大师的意思是让我们自己用脚本做一个判断,判断检查是否需要把增量索引合并到主索引上去。因为coreseek本身是没有这项功能的。那么我们就用一个shell搞定吧。很有效,至少对我来说,it works well。

#!/bin/sh
output=`/usr/local/coreseek/bin/indexer delta --rotate 2>&1`
if [[ $output =~ "collected 0 docs," ]];then
        echo 'delta not find records, so continue'
else
        /usr/local/coreseek/bin/indexer --merge main delta  --rotate
        /usr/bin/mysql -hlocalhost -uroot -pyourmysqlpassword -Dyourdatabasename -e 'REPLACE INTO sph_counter SELECT 1, MAX(id) FROM yourtablename'
        /usr/local/coreseek/bin/indexer delta --rotate
fi

其实这个shell非常简单,就是利用了一下if做了一个判断而已。哈哈,这个就是我说的小技巧了。是不是要喷我了哈。高手莫要笑话哦。


当然这里假定了一些信息,包括你的主索引假定为main、以及一些安全Coreseek的路径,以及对应的增量索引ID的记录表信息。大家可以根据需要,对应的进行修改即可。最后给上一个对应的记录增量索引执行记录ID的表结构信息

CREATE TABLE `sph_counter` (
  `counter_id` int(11) NOT NULL,
  `max_doc_id` bigint(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`counter_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这里只是我个人在用的关于coreseek的一个增量索引上的笔记,相信您会有更好的办法解决上面提到的问题吧。希望对大家有所帮助哦。最后附上一个简单的coreseek的配置文件。也非常的简单,仅供参考。

source main
{
    type                    = mysql
    sql_host                = db_host
    sql_user                = db_user_name
    sql_pass                = db_password
    sql_db                    = db_name
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8
    sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM article

    sql_query                = SELECT id, UNIX_TIMESTAMP(ctime) AS ctime, type,  language, status, title, content FROM article WHERE id<=(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)
   sql_attr_timestamp   = ctime
   sql_attr_uint        = type
   sql_attr_uint = language
   sql_attr_uint        = status

   sql_query_info_pre      = SET NAMES utf8
   sql_query_info            = SELECT * FROM article WHERE id=$id
}

source delta : main
{
    sql_query_pre = SET NAMES utf8
    sql_query = SELECT id, UNIX_TIMESTAMP(ctime) AS ctime, type,  language, status, title, content FROM article WHERE id>(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)

    sql_attr_timestamp   = ctime
    sql_attr_uint        = type
    sql_attr_uint = language
    sql_attr_uint        = status
}

#index定义
index main
{
    source            =  main
    path            = /usr/local/coreseek/var/data/main
    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip                = 0
    charset_dictpath = /usr/local/mmseg3/etc/
    charset_type        = zh_cn.utf-8
    ngram_len = 0
}

index delta : main
{
    source            =  delta
    path            = /usr/local/coreseek/var/data/delta
    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    html_strip                = 0
    charset_dictpath = /usr/local/mmseg3/etc/
    charset_type        = zh_cn.utf-8
    ngram_len = 0
}

另外说明一下,这个索引,可以根据需要配置多份source和index的。至于用到的其他的配置。这里限于篇幅,就不全部列出来了哦。希望能对大家学习有帮助哦。

最新评论

封面图片

封面图片

简介

今天来对全文检索coreseek的增量索引做一个介绍。对于coreseek不知道是何物的朋友们,这篇文章不是为您准备的哦。本文,我们主要简单来对coreseek的增量索引做一个简单的介绍。简单来讲,coreseek的增量索引就是为了让我们不必要全量更新整个数据的索引内容。我们这篇文章,不仅仅告诉您如何做一个简单的增量索引的配置,同时会告诉您,利用一个简单的小技巧,让您把生成增量索引的脚本运行的更加迅速哦。