欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[centos]coreseek配置模拟实时索引

程序员文章站 2022-07-01 13:49:56
...

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

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

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

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

 

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

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

 

[3] 第二步,修改配置文件

source src1{
        type 		= mysql
        sql_host 	= localhost
        sql_user 	= root
        sql_pass 	= 
        sql_db 		= test
        sql_port 	= 3306
        sql_query_pre 	= SET NAMES utf8
        sql_query 	= SELECT id,title,content,create_time FROM ps_news
        sql_attr_uint 	= id
        sql_attr_timestamp  = create_time
        sql_query_info_pre  = SET NAMES utf8
}

index src1{
        source = src1
        path 			= /usr/local/coreseek/var/data/src1/
        docinfo 		= extern
        mlock 			= 0
        morphology 		= none
        min_word_len 	        = 1
        html_strip 		= 0

        charset_type 		= zh_cn.utf-8
        charset_dictpath 	= /usr/local/mmseg3/etc/
        #charset-table 		= 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
        #ngram_len 			= 1
        #ngram_chars 		= U+3000..U+2FA1F
}

#global indexer
indexer
{
    mem_limit            = 128M
}

#searchd
searchd
{
    listen              = 9312
    read_timeout        = 5
    max_children        = 30
    max_matches         = 1000
    seamless_rotate     = 0
    preopen_indexes     = 0
    unlink_old		= 1
    pid_file		= /usr/local/coreseek/var/log/searchd_rtindex.pid
    log 		= /usr/local/coreseek/var/log/searchd_rindex.log       
    query_log 		= /usr/local/coreseek/var/log/query_rtindex.log
}

 

[3] 写3个脚本,让系统自动生成增量索引和合并索引和重建索引

#delta.sh文件
#!/bin/sh
/usr/local/coreseek/bin/indexer delta --rotate

#main.sh文件
#!/bin/sh
/usr/local/coreseek/bin/indexer --all --rotate

#merge.sh文件
#!/bin/sh
/usr/local/coreseek/bin/indexer --merge main delta --rotate --merge-dst-range deleted 0 0

 

[4] 写计划任务每隔一分钟执行一遍delta.sh,每五分钟执行一遍merge.sh,每天1:30执行main.sh

 

*/1 * * * * /bin/sh /usr/local/coreseek/sh/delta.sh
*/5 * * * * /bin/sh /usr/local/coreseek/sh/merge.sh
30 1 * * * /bin/sh /usr/loca/coreseek/sh/main.sh