我一直在阅读Sphinx搜索引擎和Thinking Sphinx宝石。在TS docs中它说......
与许多其他搜索服务相比,Sphinx有一个主要限制:您无法更新索引中单个文档的字段,但必须重新处理该索引的所有数据。
如果我理解正确,这意味着当用户添加或编辑某些内容时,更改不会反映在索引中。因此,如果他们添加记录,则在重建整个索引之前不会出现搜索。或者,如果他们删除了一条记录, 会出现在搜索中,然后会导致某种错误或令人沮丧的行为。
此外,在重建索引时,Sphinx将被关闭。因此,您的应用的搜索功能会定期下线(每小时一次,每隔几个小时一次),任何尝试进行搜索的人都会收到错误消息或“稍后再试”消息。
好的,显然在现实世界的应用程序中都不能接受。所以你几乎不得不使用delta索引。
但显然你仍然需要经常关闭你的搜索引擎并做一个完整的索引......
启用增量索引并不会消除定期运行完整重新索引的需要,否则增量索引本身将变得与核心索引一样大,这就消除了将其保持独立的优势。它还会减慢您对服务器的请求,从而更改模型记录。
我真的不明白文档在这里说的是什么。也许有人可以帮助我。我认为delta索引的重点在于你不需要定期重建索引。只要数据发生变化,它就会立即更新。
因为每小时重建索引或每一件事都会完全搞砸了,对吧?
答案 0 :(得分:11)
如果我理解正确,那意味着 当用户添加或编辑某些内容时, 这种变化没有体现在 指数。所以,如果他们添加一个记录 在此之前不会进行搜索 整个索引重建。或者如果他们 删除一条记录,它会出现 搜索,然后导致某种形式 错误或令人沮丧的行为。 此外,在重建索引时,Sphinx将被关闭。 ...
您无需重建索引 - 只需重新编制索引即可。这意味着 - 没有必要停止守护进程。只有在改变索引的结构后才需要重建 - 这不是这里的情况。
而对于第二部分 - 再次,你不重建索引,ergo停止deamon是没有必要的。当使用delta索引时,实际上有两个用于搜索的索引 - 主索引(应该重新索引一次)和delta索引(在记录上的每个相关操作之后刷新)。如果我理解正确,当重新索引主索引时(例如通过cron任务),delta索引只是简单地合并到主索引中,因此它不会占用那么多地方并保持快速。