我有一个配置了两个索引的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)
}
答案 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中的主要文档。但是您也只想要自上次重新索引以来更新文档。