Sphinx Range查询+杀戮列表

时间:2012-09-13 11:25:42

标签: sphinx thinking-sphinx

我有一个配置了两个索引的sphinx实例:main和delta。它们都有sql查询范围。

在delta索引中的

我有一个killlist查询来从主索引中删除修改过的文章。

此查询的范围是否与内容查询类似?

即。

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)
 }

1 个答案:

答案 0 :(得分:2)

  

此查询的范围是否与内容查询类似?

没有。杀毒者不支持远程查询。它只运行一个查询。

很明显,这:

  

sql_query_range = SELECT MIN(id),MAX(id)FROM documents

看起来不对。这是从文档表中获取所有ID。但是sql_query使用来自SphinxTable

的maxID有一个aditional caluse

应该是

之类的东西
sql_query_range   = SELECT (SELECT maxID from SphinxTable),MAX(id) FROM documents

否则你将发出大量的查询 - 获取将在主要文件中的文件,因为第二个版本将永远不会匹配。

所以就这样做

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)

注意平等的变化。您需要在killlist中的主要文档。但是您也只想要自上次重新索引以来更新文档。