在我的开发配置中重新索引思考Sphinx索引需要几个小时,主要是因为有几个巨大的表(我们没有使用增量更新)。即使我将索引更改为另一个更小的表,由于存在大型表,重新索引也需要一个多小时。
有没有办法强制TS只重新索引数据库中指定的表?
答案 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