【问题标题】:How to remove deleted entries from the main sphinx index?如何从主狮身人面像索引中删除已删除的条目?
【发布时间】:2010-10-10 20:42:10
【问题描述】:

我有一个使用 sphinx 的 main/delta 索引方案的站点。 main 每天重建一次,delta 每 5 分钟重建一次。这适用于索引新提交的项目。

问题是,从索引中删除项目的频率与添加项目一样频繁,而且通常删除的项目较旧,因此它们已经驻留在主索引中。因此,在删除项目后,它们仍会出现在搜索结果中长达 24 小时(直到凌晨 1 点重建 main 时)。

我该如何解决这个问题?

【问题讨论】:

  • 您可能应该删除thinking-sphinx 标签,因为thinking-sphinx 是Ruby 的文档系统。
  • 如果杀死列表是一种解决方案,那么您必须接受有关杀死列表使用的答案。谢谢。
  • @chris - Thinking Sphinx 是 Sphinx 的 Ruby 包装器。

标签: sphinx


【解决方案1】:

请参阅 sql_query_killlist http://sphinxsearch.com/docs/current.html#conf-sql-query-killlist 的文档

简而言之,您需要在 delta 索引中进行以下操作:

sql_query_killlist = select id from mytable where updated > @last_delta_update

【讨论】:

    【解决方案2】:

    Sphinx 最近推出了实时索引功能,您可以在其中即时添加、更新和删除索引。但是,它仅在 1.10 中可用,而且看起来仍然很原始。

    http://www.sphinxsearch.com/docs/current.html#rt-indexes

    或者,您可以更频繁地完全重新索引。如果你有很多删除,每 24 小时似乎有点长。作为最后的努力,您总是可以在您的应用程序中检查返回的 ID 确实仍然存在,然后将它们过滤掉。

    【讨论】:

    • 实际上 kill_list 是解决问题的方法,没有使用 1.0
    【解决方案3】:

    一种选择是在索引中定义一个属性,然后将其值更改为“忽略”某些文档。 例如,我的索引有一个 flag_ignore 属性。所有搜索都被过滤,因此只有那些带有 flag_ignore=0 的文档被匹配。 当文档需要立即从索引中消失时,我调用 Sphinx->UpdateAttributes() 并将值设置为 1,这将使文档从任何后续搜索中消失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      • 2020-06-09
      • 2018-07-16
      • 1970-01-01
      相关资源
      最近更新 更多