重建索引后如何正常重启Sphinx搜索守护进程

Dav*_*Xia 14 full-text-search sphinx

我已经重新编制了我的Sphinx搜索索引/usr/local/sphinx/bin/indexer --all --rotate,并将原始索引输出文件重命名为其他内容.只需更改传递的索引参数就$sphinx->Query($query, $index);不会返回任何结果.

我怀疑守护进程不知道新的索引文件存在.所以我跑了

sudo /usr/local/sphinx/bin/searchd

再次尝试重新启动它.但它扔了

FATAL: failed to lock pid file '/usr/local/sphinx/var/log/searchd.pid': Resource temporarily unavailable (searchd already running?)

我不得不kill使用搜索守护进程的2个进程并再次启动它以从新的索引文件中获取.是否有一种优雅的方式来重新启动它?

Nar*_*sus 25

我知道这是一个迟到的答案,但你知道,要重新启动Sphinx,你需要停止它然后启动它(如两个不同的进程).

要停止它,请打电话searchd --stop然后再次启动它searchd.

  • 命令`/etc/init.d/sphinxsearch restart`似乎是特定于分发的. (4认同)
  • Imho` /etc/init.d/sphinxsearch restart`更好 (2认同)

dax*_*roc 9

您需要在新索引上调用indexer来创建它,然后--rotate来更新它.

所以它会是这样的

indexer --config /path/to/config.conf indexname
Run Code Online (Sandbox Code Playgroud)

然后,当您只想更新索引时

indexer --config /path/to/config.conf --rotate --all
Run Code Online (Sandbox Code Playgroud)

这将创建每个索引的临时副本,并在完成后替换旧索引.有关实际情况的更多信息,请参阅http://sphinxsearch.com/docs/manual-0.9.9.html#ref-indexer

在你得到的另一个错误

ps aux | grep searchd
Run Code Online (Sandbox Code Playgroud)

如果没有返回结果,则删除/usr/local/sphinx/var/log/searchd.pid并再次开始搜索