>  기사  >  백엔드 개발  >  coreseek에 의해 추가된 증분 인덱스가 적용되지 않습니다. 무슨 일인가요?

coreseek에 의해 추가된 증분 인덱스가 적용되지 않습니다. 무슨 일인가요?

WBOY
WBOY원래의
2016-08-30 09:36:411128검색

Windows 7 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 서비스를 시작하면 검색 결과가 바뀌는데 2~3개밖에 안 나오네요 )

구성 파일:

<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>

답글 내용:

Windows 7 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 서비스를 시작하면 검색 결과가 바뀌는데 2~3개밖에 안 나오네요 )

구성 파일:

<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>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.