2013-04-18 58 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記錄的時間戳複製到主記錄中。