Coreseek 增量索引模拟实时索引

栏目: 编程工具 · 发布时间: 6年前

内容简介:有这么一种常见的情况:整个数据集非常大,以至于难于经常性的重建索引,但是每次新增的记录却相当地少。一个典型的例子是:一个论坛有1000000个已经归档的帖子,但每天只有1000个新帖子。在这种情况下可以用所谓的“主索引+增量索引”(main+delta)模式来实现“近实时”的索引更新。这种方法的基本思路是设置两个数据源和两个索引,对很少更新或根本不更新的数据建立主索引,而对新增文档建立增量索引。在上述例子中,那1000000个已经归档的帖子放在主索引中,而每天新增的1000个帖子则放在增量索引中。增量索引

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

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

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

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

第一步要先创建增量索引表sph_counter

CREATE TABLE sph_counter
(
    counter_id INTEGER PRIMARY KEY NOT NULL,
    max_doc_id INTEGER NOT NULL
);

第二步:修改原来的索引配置

source mysql
{
    type                = mysql

    sql_host                = localhost
    sql_user                = root
    sql_pass                = mfy
    sql_db                = zlk
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8
    # 下面2行是新增的内容 
    sql_query_pre = REPLACE INTO sph_counter SELECT 1,MAX(id) FROM picture_info
    sql_query = SELECT * FROM picture_info \
                WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
    #这还是以前sql_query现在已经不用了sql_query                = SELECT id,pic_id,city,captionwriter,countryname,title,description,contenttype,generator,author,keyword,language,datecreatedline  FROM picture_info
                                                              #sql_query第一列id需为整数
                                                              #title、content作为字符串/文本字段,被全文索引
   # sql_attr_uint            = id           #从 SQL 读取到的值必须为整数
   sql_attr_uint            = pic_id           #从SQL读取到的值必须为整数
   sql_attr_timestamp        = datecreatedline #从SQL读取到的值必须为整数,作为时间属性
   # sql_attr_str2ordinal	= title

}
source delta:mysql
{#这里是新增的增量索引源
        sql_query_pre = SET NAMES utf8
        sql_query = SELECT * FROM picture_info \
                WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
        sql_query_post_index    = replace into sph_counter select 1,max(id) from picture_info
}
#index定义
index mysql
{
    source            = mysql             #对应的source名称
    path            = /usr/local/coreseek/var/data/mysql

    docinfo            = extern
    mlock            = 0
    morphology        = none
    min_word_len        = 1
    min_infix_len =1
    html_strip                = 0
    charset_dictpath = /usr/local/mmseg3/etc/    #BSD、 Linux 环境下设置,/符号结尾
    #charset_dictpath = etc/                        #Windows环境下设置,/符号结尾
    charset_type        = zh_cn.utf-8
}
index delta:mysql
{#这是新增的增量索引
        source          = delta
        path            =       /usr/local/coreseek/var/data/delta
}
  
#全局index定义  
indexer  
{  
    mem_limit           = 2G    
}   
   
searchd  
{  
       listen                                   = 9312  
       max_matches                         	= 10000  
       pid_file                                 = /usr/local/coreseek/var/log/searchd_mysql.pid  
       log                                      = /usr/local/coreseek/var/log/searchd_mysql.log  
       query_log                                = /usr/local/coreseek/var/log/query_mysql.log  
}

里面用红色标记的是新增或者有改动的地方。

执行索引: /usr/local/coreseek/bin/indexer -c /var/htdocs/zlk/sphinx/mysql.conf --all --rotate

执行增量索引: /usr/local/coreseek/bin/indexer -c /var/htdocs/zlk/sphinx/mysql.conf delta --rotate 

合并索引: /usr/local/coreseek/bin/indexer -c /var/htdocs/zlk/sphinx/mysql.conf --merge mysql delta --rotate --merge-dst-range deleted 0 0

写两个脚本一个是执行增量索引并合并索引的另一个是重建索引的。

delta.sh:执行增量索引并合并索引

#!/bin/sh 
/usr/local/coreseek/bin/indexer -c /var/htdocs/zlk/sphinx/mysql.conf delta --rotate 
/usr/local/coreseek/bin/indexer -c /var/htdocs/zlk/sphinx/mysql.conf --merge mysql delta --rotate --merge-dst-range deleted 0 0

main.sh:重建索引

#!/bin/sh 
/usr/local/coreseek/bin/indexer -c /var/htdocs/zlk/sphinx/mysql.conf --all --rotate

最后写个计划任务每隔一分钟执行一遍delta.sh每天12:30执行main.sh

执行命令:crontab -e

写入下面两行

1  *  * * * /var/htdocs/zlk/sphinx/delta.sh

30  1  * * * /var/htdocs/zlk/sphinx/main.sh

本文永久更新链接地址 http://www.linuxidc.com/Linux/2017-05/143601.htm


以上所述就是小编给大家介绍的《Coreseek 增量索引模拟实时索引》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入浅出Tapestry

深入浅出Tapestry

董黎伟 / 电子工业出版社 / 2007-3 / 49.0

本书以循序渐进的方式,从Tapestry框架技术的基本概念入手,讲解Tapestry框架在J2EE Web应用程序中的整体架构实现。使读者在学习如何使用Tapestry框架技术的同时,还能够获得在J2EE Web应用程序中应用Tapestry框架的先进经验。 本书详细介绍了Hivemind框架的原理与应用,使读者不但可以通过Hivemind来重构Tapestry的官方实现,还可以使用Hive......一起来看看 《深入浅出Tapestry》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具