【问题标题】:Thinking sphinx: multiple delta indices on single model思考狮身人面像:单个模型上的多个增量索引
【发布时间】:2015-04-19 07:48:49
【问题描述】:

当模型的索引被分成多个索引时,我有几个关于增量索引的问题。

在这个例子中:

ThinkingSphinx::Index.define :model, name: "index_1", with: :active_record, delta: ThinkingSphinx::Deltas::ResqueDelta do
    indexes :field_a
end

ThinkingSphinx::Index.define :model, name: "index_2", with: :active_record, delta: ThinkingSphinx::Deltas::ResqueDelta do
    indexes :field_b
end

我为每个索引获取这些文件:

model_index_1_delta
model_index_2_delta
model_index_1_core
model_index_2_core
  1. 如果我更新field_a 上的记录,model_index_2_delta 也会更新吗?
  2. 如果field_afield_b 都在记录上更新:

    一个。重新索引是否会同时更新 model_index_1_coremodel_index_2_core

    b. DB中记录的delta字段什么时候设置为0?

    c。如果先前的重新索引运行已将 delta 字段设置为 0,那么其中一个核心文件是否无法正确更新?

【问题讨论】:

    标签: ruby-on-rails sphinx resque thinking-sphinx


    【解决方案1】:
    1. 是的,如果您更新 field_a,则两个增量都会更新。 Thinking Sphinx 不会试图弄清楚模型更改是否与特定索引相关。

    2. 一个。这取决于如何处理增量。如果是默认增量 处理器 (:delta => true),然后在 其他。您正在使用 Resque,因此每个索引的处理都可以 确实重叠。不过没关系。

      b. delta 标志仅在通过rake ts:index 任务发生完整索引时设置为假/零,并且仅通过增量处理设置为真/一。在运行 rake 任务之前,它一直设置为 true - 它表明核心中是否存在不存在的更改(而不是表明它只需要针对 delta 索引进行处理)。

      c。当rake ts:index 运行时,核心索引会加载所有数据 - 增量列上没有过滤器。

    【讨论】:

    • 谢谢。关于问题 2.b:那么在模型上为多个索引设置一个“增量”列应该没有问题吗?即,一个索引不会将标志设置为 false 并阻止另一个索引更新?
    • 唯一可能发生的时间是rake ts:index 正在运行 - 因为它处理第一个核心索引,然后将所有记录的 delta 标记为 false,然后处理第一个 delta 索引,然后处理第二个核心索引,然后处理第二个增量索引。 Sphinx 一次重新加载所有索引文件(默认情况下),因此所有更改将一起应用...
    • ... 但我猜 delta 处理器可能将记录的 delta 标记为 true rake 任务正在运行,然后索引器将其标记回 false 之前增量处理器有时间只运行增量索引。不过,对于这样的碰撞,我们说的是毫秒。
    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多