Sphinx:indexer --merge到底做了什么?

时间:2012-02-21 12:10:10

标签: sphinx

索引合并的Sphinx手册says应该保留旧关键字和新关键字:

  

但请注意," old"在这种情况下,关键字不会自动删除。例如,如果有关键字" old"与DSTINDEX中的文档123相关联,以及关键字" new"在SRCINDEX中与它相关联,合并后两个关键字都将找到文档123。

我无法重现这一点。

  1. 我们有一个ID为1的文档和一个'一个'在索引main
  2. 数据库表格中的文字更改为' one'到了'两个'
  3. indexer --rotate delta
  4. indexer --rotate --merge main delta
  5. 等待searchd重新加载索引
  6. 现在我们可以通过SELECT id FROM main WHERE match('two')查找文档1,但match('one')找不到任何内容。
  7. 两个索引的来源基本上定义为:

    sql_query = SELECT id, text FROM tbl
    

    我还尝试通过sql_joined_field指定关键字,合并也不会保留旧关键字。

    这是否意味着手册错了?假设如果SRCINDEX具有ID(属性和文本关键字)的信息,合并过程将丢弃DSTINDEX对该ID的所有内容并将其替换为新信息,这是否安全?

2 个答案:

答案 0 :(得分:2)

我问安德烈·阿克森诺夫(狮身人面像的创造者)这件事。他说,如果索引docinfo是extern,他们现在会在合并时清除重复的id。

是的,这是文档中的错误。

答案 1 :(得分:0)

如果Sphinx在从搜索结果中删除时发现了重复的ID,那么Sphinx只返回唯一ID。 这就是为什么你没有在搜索结果中看到它们。