其他分享
首页 > 其他分享> > coreseek分步查询大量数据

coreseek分步查询大量数据

作者:互联网

背景

公司有个小的中文搜索服务,使用的是coreseek,时间比较久远。近期发现数据量较多,80万条,每次查询都是一次慢SQL,DBA已经告知必须要修改这个慢SQL。

coreseek安装

我是在windows上安装的,解压即用,非常方便,省去无数烦恼 -> 地址

索引配置

index searchkeyword
{
    source          = searchkeyword            #对应的source名称
    path            = D:/tools/coreseek-4.1-win32/search_data/searchkeyword #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    docinfo         = extern
    mlock           = 0
    morphology      = none
    min_word_len    = 1
    html_strip      = 0

    #中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    # charset_dictpath =/usr/local/mmseg/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = D:/tools/coreseek-4.1-win32/etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
    min_infix_len = 1

}

全局配置

#searchd服务定义
searchd
{
    listen              = 9312
    read_timeout        = 5
    max_children        = 30
    max_matches         = 5000
    seamless_rotate     = 0
    preopen_indexes     = 0
    unlink_old          = 1
    pid_file =D:/tools/coreseek-4.1-win32/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    log =D:/tools/coreseek-4.1-win32/var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    #workers=fork
    query_log =D:/tools/coreseek-4.1-win32/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}

增量索引

尝试了下,比较复杂,可能还要经过多次测试才可以认定是不是正确的,放弃

分页查询

source searchkeyword
{
    type                    = mysql
    sql_host                = test # 数据库服务器地址
    sql_user                = admin
    sql_pass                = 123
    sql_db                  = test
    sql_port                = 3306
    sql_query_pre           = SET NAMES utf8
    ## 当数据源数据太大的时候,一个sql语句查询下来往往很有可能锁表等操作。
    ## 那么我么就可以使用多次查询,那么这个多次查询就需要有个范围和步长,sql_query_range和sql_range_step就是做这个使用的。
    ## 获取最大和最小的id,然后根据步长来获取数据。比如下面的例子,如果有4500条数据,这个表建立索引的时候就会进行5次sql查询。 
    ## 而5次sql查询每次的间隔时间是使用sql_ranged_rhrottle来进行设置的。单位是毫秒。
    sql_query_range		    = SELECT MIN(id),MAX(id) FROM user;
    sql_range_step          = 1000
    sql_ranged_throttle	    = 0

    sql_query               = SELECT id,id as sid,word,key_id FROM user where id>$start and id<=$end;
    #sql_attr_uint          = sid
    sql_field_string        = word
    sql_field_string        = key_id
    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    sql_query_info          = SELECT * FROM user WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}

标签:coreseek,log,查询,分步,sql,var,query,id
来源: https://www.cnblogs.com/willsdu/p/14465278.html