2013-04-18 61 views
0

我试图设置一个主+三角洲索引方案使用时间戳字段而不是max_doc_id,如文档中的示例。三角洲索引在斯芬克斯的时间戳

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源永远不会更新在sph_counterlast_update_time

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

re-index the delta  (every 30 seconds) 

而且:

我通过执行以下操作运行此

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

我错在想合并将运行sql_query_pre更新sph_counterlast_update_time

+0

为什么你尝试使用时间戳字段而不是max_doc_id来实现索引方案? –

回答

1

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

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

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

然后在合并之后,您可以将delta记录的时间戳复制到主记录中。