0

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

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

这个查询应该像内容查询一样排列吗?

IE

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

1 回答 1

2

这个查询应该像内容查询一样排列吗?

不,killlists 不支持范围查询。它只运行一个查询。

顺便说一句,这个:

sql_query_range = 从文档中选择 MIN(id),MAX(id)

看起来不对。这是从文档表中获取所有 id。但是 sql_query 有一个使用来自 SphinxTable 的 maxID 的附加原因

应该是这样的

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

否则,您将发出大量查询 - 获取主要的文档,由于第二个 calise 将永远不会匹配。

所以就这样做

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)

注意平等的变化。您需要主要的文件,在您的杀戮清单中。但是您也只希望自上次重新索引以来更新文档。

于 2012-09-13T11:33:05.323 回答