我正在尝试使用时间戳字段而不是文档示例中的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
,我错了吗?
答案 0 :(得分:1)
我认为合并会运行sql_query_pre来更新sph_counter last_update_time吗?
是。在合并期间,Sphinx不会对索引的“源”执行任何查询。除了获取索引文件的位置之外,它可能甚至不会从配置文件中读取信息。
最简单的方法是让delta索引同时使用sql_query_pre更新(单独)计数器。
然后在合并之后,您可以将时间戳从增量记录复制到主记录。