2012-09-13 34 views
0

我有一個配置了兩個索引的sphinx實例:main和delta。他們都有sql查詢範圍。獅身人面像遠程查詢+ killlist

在增量索引我有一個kilistist查詢從主索引中刪除修改後的文章。

這個查詢應該像範圍內容查詢一樣嗎?

source delta : main { 
    sql_query_range = SELECT MIN(id),MAX(id) FROM documents 
    sql_range_step = 1000 

    sql_query = SELECT * FROM documents WHERE id>=$start AND id<=$end WHERE ID > (SELECT maxID from SphinxTable) 

    sql_query_killlist = SELECT id FROM documents WHERE id>=$start AND id<=$end WHERE ID > (SELECT maxID from SphinxTable) 
} 
+0

您的'sql_query_killlist'與您的'sql_query'相同。它的目的是? – Tchoupi

+0

是的,由delta索引索引的文檔應該從前面的索引中刪除(主) – madoke

+0

不,它們不應該是相同的,請參閱下面的答案。 – barryhunter

回答

2

應此查詢被測距喜歡的內容查詢?

編號的killlists不支持範圍查詢。它只運行一個查詢。

順便說一句,這一點:

sql_query_range = SELECT MIN(ID),MAX(ID)從文檔中

看起來是錯誤的。這是從文檔表中取出所有ID。但sql_query具有使用maxID從SphinxTable

應該是這樣的

sql_query_range = SELECT (SELECT maxID from SphinxTable),MAX(id) FROM documents 

否則,你將要發出的查詢很多的aditional的caluse - 獲取文件,這將是主,這永遠不會因爲第二個信念而相配。

所以只是做

sql_query = SELECT * FROM documents WHERE id>=$start AND id<=$end WHERE ID > (SELECT maxID from SphinxTable) OR updated > (SELECT updatedts FROM SphinxTable) 
sql_query_killlist = SELECT id FROM documents WHERE id <= (SELECT maxID from SphinxTable) AND updated > (SELECT updatedts FROM SphinxTable) 

注意,在平等的變化。你需要在你的基爾裏主要的文件。但是您也只想要自上次重新索引以來更新的文檔。

+0

感謝您的提示=)你是對的 – madoke