思考狮身人面像 - 每桌重新编制索引

时间:2012-01-10 19:57:03

标签: ruby-on-rails thinking-sphinx

在我的开发配置中重新索引思考Sphinx索引需要几个小时,主要是因为有几个巨大的表(我们没有使用增量更新)。即使我将索引更改为另一个更小的表,由于存在大型表,重新索引也需要一个多小时。

有没有办法强制TS只重新索引数据库中指定的表?

2 个答案:

答案 0 :(得分:11)

没有办法告诉Thinking Sphinx一次处理一个索引,但是通过Sphinx的索引器工具直接可以(而不是特别困难)。

indexer --config config/development.sphinx.conf model_core

需要注意的一些事项:除非您提供索引定义自定义名称,否则它将默认使用带有_core后缀的模型名称,下标和下划线。如果你有delta指数,它们会有一个_delta后缀。此外,如果Sphinx正在运行,请将--rotate标志添加到该调用。

您可以根据需要指定任意数量的索引。如果您想一次处理所有索引(就像Thinking Sphinx的rake任务一样),--all会为您做到这一点。

暂且不谈 - 我们谈论了多少条记录?您的索引定义有多复杂?索引处理的几个小时根本不常见。在Sphinx索引中引用的关联使用的任何外键列上是否有数据库索引?

答案 1 :(得分:1)

我为此写了一个(相当愚蠢的)BASH函数。请注意,它必须从项目的根目录运行。

# "rebuild" one index at a time
function rebuildts {
  echo "rake ts:stop" && rake ts:stop
  echo "rake ts:configure" && rake ts:configure
  echo "Runnning indexer"
  indexer --config config/development.sphinx.conf $1
  echo "rake ts:start" && rake ts:start
}

用法:rebuildts my_model_core