按照Sphinx中的时间戳进行Delta索引

时间:2013-04-18 14:30:20

标签: mysql indexing sphinx delta-index

我正在尝试使用时间戳字段而不是文档示例中的max_doc_id来设置主+ 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_pre来源的main永远不会更新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,我错了吗?

1 个答案:

答案 0 :(得分:1)

  

我认为合并会运行sql_query_pre来更新sph_counter last_update_time吗?

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

最简单的方法是让delta索引同时使用sql_query_pre更新(单独)计数器。

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