mysql - Sphinx 主/增量索引,sql_query_killlist

标签 mysql sphinx delta

我目前正在使用 Sphinx 为包含 20 多万条记录的 MySQL 查询建立索引。

我正在使用增量索引来更新主索引并添加所有新记录。

不幸的是,对表的所有更改都被删除了。

我知道我可以使用 sql_query_killlist 来获取所有需要删除或更新的文档 ID。不幸的是,我不明白这实际上是如何工作的,而且 Sphinx 的文档没有足够好的例子让我理解。

如果我使用下面的例子,我该如何实现 killlist?

在 MySQL 中

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

在 sphinx.conf 中

source main
{
    # ...
    sql_query_pre = SET NAMES utf8
    sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents
    sql_query = SELECT id, title, body FROM documents \
        WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}

source delta : main
{
    sql_query_pre = SET NAMES utf8
    sql_query = SELECT id, title, body FROM documents \
        WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
}

主索引

{
    source = main
    path = /path/to/main
    # ... all the other settings
}

注意所有其他设置是如何从 main 复制的, 但源和路径被覆盖(它们必须是) 索引增量:主要

{
    source = delta
    path = /path/to/delta
}

最佳答案

具体细节在很大程度上取决于您如何标记已删除的文档。但只会添加类似

的内容
 sql_query_killist = SELECT id FROM documents 
                     WHERE status='deleted' 
                           AND id<=( SELECT max_doc_id FROM sph_counter 
                                     WHERE counter_id=1 )

delta 索引。这将捕获主索引中已删除记录的 ID,并将它们添加到 killlist 中,这样它们就永远不会出现在搜索结果中。

如果要捕获更新的记录,需要安排将新行包含在增量的主 sql_query 中,并将它们的 ID 放入 kill-list 中。

关于mysql - Sphinx 主/增量索引,sql_query_killlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11883865/

相关文章:

php - 每次加载时自动执行搜索查询,无需点击搜索按钮

mysql - 按匹配的标签数量对具有匹配标签的项目进行排序

git - 提交增量之间的差异,而不是提交本身

c++ - 使用增量时间时如何保持跳跃高度相同?

php - 只允许创建条目的用户修改它

php - 列出类别以及每个项目的计数

ruby-on-rails - Mysql2 (rails 3) 的未定义方法 `next_result'

search - 在 Sphinx 搜索中,如何将 "hashtag"添加到 charset_table?

Java库计算两个字符串之间的相对差异?

php - SQL查询按给定日期范围对记录进行分组