我目前正在使用 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 和 path 被覆盖(它们必须是) index delta : main
{
    source = delta
    path = /path/to/delta
}