【问题标题】:Sphinx delta indexing -- still necessary to rebuild the main index?狮身人面像增量索引——仍然需要重建主索引?
【发布时间】:2010-12-19 09:10:28
【问题描述】:

我一直在阅读 Sphinx 搜索引擎和 Thinking Sphinx gem。在 TS docs 中它说...

与许多其他搜索服务相比,Sphinx 有一个主要限制:您无法更新索引中单个文档的字段,而必须重新处理该索引的所有数据。

如果我理解正确,这意味着当用户添加或编辑某些内容时,更改不会反映在索引中。因此,如果他们添加一条记录,则在重建整个索引之前,它不会出现在搜索中。或者,如果他们删除了一条记录,它出现在搜索中,然后导致某种错误或令人沮丧的行为。

此外,在重建索引时,Sphinx 被关闭。因此,您应用的搜索功能会定期离线(每小时一次,每隔几个小时一次),任何尝试进行搜索的人都会收到错误消息或“稍后再试”消息。

好的,显然这些在现实世界的应用程序中都是不可接受的。所以你几乎必须使用增量索引。

但显然您仍然需要定期关闭搜索引擎并进行完整索引...

启用 delta 索引并不会消除定期运行完整重新索引的需要,否则 delta 索引本身将增长到与核心索引一样大,这消除了保持独立的优势。它还会减慢您对服务器的请求以更改模型记录。

我真的不明白文档在这里说什么。也许有人可以帮助我。我认为增量索引的全部意义在于您不需要定期重建索引。只要数据发生变化,它就会立即更新。

因为每小时重建索引或者每件事都会完全搞砸,对吧?

【问题讨论】:

  • “增量索引本身将增长到与核心索引一样大”位绝对是错误的。每次实时更新/合并完成时,增量索引都会替换为新的、以前未编制索引的数据。

标签: ruby-on-rails ruby full-text-search sphinx thinking-sphinx


【解决方案1】:

如果我理解正确,这意味着 当用户添加或编辑某些内容时, 变化没有反映在 指数。所以如果他们添加一条记录 不会出现在搜索中,直到 整个索引被重建。或者如果他们 删除一条记录,它会出现在 搜索,然后引起某种 错误或令人沮丧的行为。 此外,在重建索引时,Sphinx 被关闭。 ...

您不需要重建索引 - 只需重新索引它们。这意味着 - 没有必要停止守护进程。仅在更改索引结构后才需要重建 - 此处不是这种情况。

对于第二部分 - 同样,您不需要重建索引,因此不需要停止守护进程。当使用增量索引时,实际上有两个索引用于搜索 - 主索引(应该偶尔重新索引一次)和增量索引(在记录上的每个相关操作后刷新)。如果我理解正确,在重新索引主索引时(例如,通过 cron 任务),增量索引只是合并到主索引中,所以它不会占用太多位置并保持快速。

【讨论】:

  • 当重新索引主索引时,会执行完整索引(即增量不会以任何方式合并)。除此之外,您的评论很到位。
  • 是的,它没有物理合并,这是一个糟糕的措辞。感谢您指出。
  • 另外,值得注意的是 - 在 Thinking Sphinx 中(尽可能多地)跟踪删除,而不需要增量索引。
  • 请注意,每当您重新索引主目录时,您都需要重新索引增量。否则,您将在两个索引中都有条目,直到重新索引增量(在主重新索引后有效地将其清除)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多