Heim  >  Artikel  >  Backend-Entwicklung  >  coreseek添加增量索引后无法生效,是怎么回事?

coreseek添加增量索引后无法生效,是怎么回事?

WBOY
WBOYOriginal
2016-08-30 09:36:411128Durchsuche

windows7 64位环境下,用的是3.2.14 win32的版本。

问题:启动searchd服务后,再添加的索引都无效,只有重启searchd服务后才能生效。

主索引:mysql
增量索引:new

操作过程:
1.建立主索引:

<code>indexer -c csft.conf mysql
</code>

2.启动服务:

<code>serachd
</code>

3.通过php进行搜索:
能找到8条结果

4.数据库中新添加相关关键词的数据

5.添加增量索引
indexer -c csft.conf new --rotate
coreseek添加增量索引后无法生效,是怎么回事?

6.通过php进行搜索
结果还是8条

7.或者试一下合并索引:

<code>indexer -c csft.conf mysql new -merge-dst-range deleted 0 0 --rotate
</code>

coreseek添加增量索引后无法生效,是怎么回事?

8.通过php进行搜索
结果仍然是8条

9.重新建立主索引:

<code>indexer -c csft.conf mysql --rotate
</code>

10.通过php进行搜索
结果仍然是8条

11.关闭原有的searchd服务,再启动searchd服务,则查询的结果就有了刚才插入的数据
(奇怪的是,如果不关闭原来的searchd服务,直接在建索引的那个窗口中启动searchd服务,搜索的结果会变,但只有两三条,不知这又是什么原因?)

配置文件:

<code>#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/
#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库

#源定义
source mysql
{
    type                    = mysql

    sql_host                = localhost
    sql_user                = root
    sql_pass                = root
    sql_db                    = mall
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8
    #插入文章表的最大id
    sql_query_pre           = REPLACE INTO acticle_new SELECT 1, MAX(id) FROM acticle  
    

    sql_query                = SELECT id, title,content FROM acticle
                                                              #sql_query第一列id需为整数
                                                              #title、content作为字符串/文本字段,被全文索引
    #sql_attr_uint            = group_id           #从SQL读取到的值必须为整数
    #sql_attr_timestamp        = date_added #从SQL读取到的值必须为整数,作为时间属性

    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    sql_query_info            = SELECT * FROM acticle WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}

#增量数据源
source new:mysql
{
 sql_query_pre            = SET NAMES utf8
 
 sql_query=select id,title,content from acticle where id>(select newid from acticle_new where id=1);
 
 sql_query_post  = REPLACE INTO acticle_new SELECT 1, MAX(id) FROM acticle 
 sql_query_post_index  = REPLACE INTO acticle_new SELECT 1, MAX(id) FROM acticle 

}


#index 主索引定义
index mysql
{
    source            = mysql             #对应的source名称
    path            = E:/coreseek/var/data/mysql #请修改为实际使用的绝对路径,例如:/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/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = E:/coreseek/etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
    
}

#增量索引
index new:mysql
{
    type=rt
    source            = new             #对应的source名称
    path            = E:/coreseek/var/data/new #请修改为实际使用的绝对路径,例如:/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/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = E:/coreseek/etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
    
}


#全局index定义
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 = E:/coreseek/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    log = E:/coreseek/var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    query_log = E:/coreseek/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}</code>

回复内容:

windows7 64位环境下,用的是3.2.14 win32的版本。

问题:启动searchd服务后,再添加的索引都无效,只有重启searchd服务后才能生效。

主索引:mysql
增量索引:new

操作过程:
1.建立主索引:

<code>indexer -c csft.conf mysql
</code>

2.启动服务:

<code>serachd
</code>

3.通过php进行搜索:
能找到8条结果

4.数据库中新添加相关关键词的数据

5.添加增量索引
indexer -c csft.conf new --rotate
coreseek添加增量索引后无法生效,是怎么回事?

6.通过php进行搜索
结果还是8条

7.或者试一下合并索引:

<code>indexer -c csft.conf mysql new -merge-dst-range deleted 0 0 --rotate
</code>

coreseek添加增量索引后无法生效,是怎么回事?

8.通过php进行搜索
结果仍然是8条

9.重新建立主索引:

<code>indexer -c csft.conf mysql --rotate
</code>

10.通过php进行搜索
结果仍然是8条

11.关闭原有的searchd服务,再启动searchd服务,则查询的结果就有了刚才插入的数据
(奇怪的是,如果不关闭原来的searchd服务,直接在建索引的那个窗口中启动searchd服务,搜索的结果会变,但只有两三条,不知这又是什么原因?)

配置文件:

<code>#MySQL数据源配置,详情请查看:http://www.coreseek.cn/products-install/mysql/
#请先将var/test/documents.sql导入数据库,并配置好以下的MySQL用户密码数据库

#源定义
source mysql
{
    type                    = mysql

    sql_host                = localhost
    sql_user                = root
    sql_pass                = root
    sql_db                    = mall
    sql_port                = 3306
    sql_query_pre            = SET NAMES utf8
    #插入文章表的最大id
    sql_query_pre           = REPLACE INTO acticle_new SELECT 1, MAX(id) FROM acticle  
    

    sql_query                = SELECT id, title,content FROM acticle
                                                              #sql_query第一列id需为整数
                                                              #title、content作为字符串/文本字段,被全文索引
    #sql_attr_uint            = group_id           #从SQL读取到的值必须为整数
    #sql_attr_timestamp        = date_added #从SQL读取到的值必须为整数,作为时间属性

    sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    sql_query_info            = SELECT * FROM acticle WHERE id=$id #命令行查询时,从数据库读取原始数据信息
}

#增量数据源
source new:mysql
{
 sql_query_pre            = SET NAMES utf8
 
 sql_query=select id,title,content from acticle where id>(select newid from acticle_new where id=1);
 
 sql_query_post  = REPLACE INTO acticle_new SELECT 1, MAX(id) FROM acticle 
 sql_query_post_index  = REPLACE INTO acticle_new SELECT 1, MAX(id) FROM acticle 

}


#index 主索引定义
index mysql
{
    source            = mysql             #对应的source名称
    path            = E:/coreseek/var/data/mysql #请修改为实际使用的绝对路径,例如:/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/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = E:/coreseek/etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
    
}

#增量索引
index new:mysql
{
    type=rt
    source            = new             #对应的source名称
    path            = E:/coreseek/var/data/new #请修改为实际使用的绝对路径,例如:/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/mmseg3/etc/ #BSD、Linux环境下设置,/符号结尾
    charset_dictpath = E:/coreseek/etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    charset_type        = zh_cn.utf-8
    
}


#全局index定义
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 = E:/coreseek/var/log/searchd_mysql.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    log = E:/coreseek/var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    query_log = E:/coreseek/var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
}</code>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn