在Sphinx中使用主索引和增量索引

10

我正在将我的网站全文搜索切换到 Sphinx。 我将使用 SphinxSE 进行搜索。

按照手册中的说明,我创建了两个索引:http://www.sphinxsearch.com/docs/manual-0.9.9.html#live-updates

它似乎可以工作,并在它自己的索引中索引不同的内容,但是我对如何处理索引更新、合并和重建感到有些困惑。

据我理解,我应该设置 cron 使其每隔约 5 分钟运行 "indexer delta --rotate" 命令,以添加新的提交到索引中。 然后,每天一次,我会通过运行 "indexer main delta --rotate" 命令将 delta 索引合并到主索引中。 然后,每月一次左右,我会运行 "indexer --all" 命令重新构建所有索引。

我做得对吗,还是我漏掉了什么?


记录一下 - 这基本上就是我的设置,全部通过 cron 来完成。感谢您的提问,因为目前运行方式让我感到有些不安全。让我们听听最佳实践! - Mahdi.Montgomery
每次运行任何一个命令,搜索会在其运行期间停止工作吗? - user15063
在我的情况下,执行 indexer --all --rotate --config /path/to/sphinx.conf 命令只需要 0.024 秒(每秒处理 75k 篇文档,为 4 个域名运行 5 个索引)。如果我的索引显著增长,我可能会遇到问题。 - Mahdi.Montgomery
这个问题的标签有误。thinking-sphinx 应该改为 sphinx。 - Chris Henry
2个回答

3
听起来很像我为一位客户设置的方式。不需要担心,在更新期间搜索功能不会停止工作。根据 Sphinx 文档:
--rotate 用于旋转索引。除非您可以在不影响用户的情况下将搜索功能离线,否则您几乎肯定需要在索引新文档时保持搜索运行状态。--rotate 会创建第二个与第一个平行的索引(在相同位置,仅在文件名中包括 .new)。完成后,索引器通过发送 SIGHUP 信号通知 searchd,然后 searchd 将尝试重命名索引(将现有索引重命名为包含 .old 的名称,并将 .new 重命名以替换它们),然后开始从较新的文件提供服务。根据 seamless_rotate 的设置,可能会稍有延迟才能搜索新的索引。

2
--rotate只是在tmp中构建索引(需要磁盘空间),并在完成后切换+重新启动searchd。
关于delta,你需要使用预查询来计算“limit”max(id)主要索引id低于该限制,并且delta高达该限制。
如果您有一个时间戳(尽可能索引),您可以使用它。
主要->where timefile < today() delta->where timefile >= today()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接