4

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

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

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

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

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

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

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

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

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

4

1 回答 1

12

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

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

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

于 2009-11-23T08:06:55.910 回答