狮身人面像三角洲索引 - 仍然需要重建主要指数?

时间:2009-11-23 06:39:49

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

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

  

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

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

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

好的,显然在现实世界的应用程序中都不能接受。所以你几乎不得不使用delta索引。

但显然你仍然需要经常关闭你的搜索引擎并做一个完整的索引......

  

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

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

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

1 个答案:

答案 0 :(得分:11)

  

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

您无需重建索引 - 只需重新编制索引即可。这意味着 - 没有必要停止守护进程。只有在改变索引的结构后才需要重建 - 这不是这里的情况。

而对于第二部分 - 再次,你不重建索引,ergo停止deamon是没有必要的。当使用delta索引时,实际上有两个用于搜索的索引 - 主索引(应该重新索引一次)和delta索引(在记录上的每个相关操作之后刷新)。如果我理解正确,当重新索引主索引时(例如通过cron任务),delta索引只是简单地合并到主索引中,因此它不会占用那么多地方并保持快速。