0

我正在尝试使用时间戳字段而不是文档中的示例中的 max_doc_id 来设置 main+delta 索引方案。

source main
{
    sql_query_pre   = \
    REPLACE INTO sph_counter (counter_id, last_update_time) VALUES (1, NOW())

sql_query       = \
    SELECT id, filename, absolute_path, last_update_time \
    FROM files \
    WHERE last_update_time <= ( SELECT last_update_time FROM sph_counter WHERE counter_id=1)
}

source delta
{
sql_query       = \
    SELECT id, filename, absolute_path, last_update_time \
    FROM files \
    WHERE last_update_time > ( SELECT last_update_time FROM sph_counter WHERE counter_id=1)

sql_query_pre   =
}

索引和合并按预期工作,但是sql_query_premain永远不会更新表last_update_time中的sph_counter

我不确定我的问题可能出在哪里。

我通过执行以下操作来运行它:

re-index the delta       (every 30 seconds)

和:

merge delta into main    (every 10 mins)
re-index the delta       (after merge)

我认为合并将运行sql_query_pre以更新sph_counter last_update_time?

4

1 回答 1

1

我认为合并将运行 sql_query_pre 来更新 sph_counter last_update_time 我错了吗?

是的。在合并期间,Sphinx 不会对索引的“源”运行任何查询。除了获取索引文件的位置之外,它可能甚至没有从配置文件中读取信息。

最简单的方法是让增量索引也使用其 sql_query_pre 更新一个(单独的)计数器。

然后在合并之后,您可以将时间戳从增量记录复制到主记录。

于 2013-04-18T19:05:43.970 回答