gpt4 book ai didi

ruby-on-rails - 在 Thinking Sphinx 中使用增量索引进行关联

转载 作者:数据小太阳 更新时间:2023-10-29 08:41:14 25 4
gpt4 key购买 nike

我有一个产品模型:

class Product < ActiveRecord::Base
belongs_to :subcategory

define_index do

# fields
indexes subcategory.name, :as => :subcategory, :sortable => true, :facet => true

# attributes
has subcategory_id, created_at, updated_at

#properties
set_property :delta => true

现在,假设用户更新了子类别名称,这是更新产品增量索引的正确方法吗?

根据此文档:http://freelancing-god.github.com/ts/en/deltas.html ,应向产品发送保存消息,因此在这种情况下,我应该针对与子类别相关的每个产品并发送保存消息,如下所示:

class Subcategory < ActiveRecord::Base
has_many :products

after_save :set_product_delta_flag

private

def set_product_delta_flag
products.each { |product|
product.delta = true
product.save
}
end
end

我认为这太过分了,因为我们每个子类别有大约 100,000 种产品。这是更新增量索引的正确方法吗?我错过了什么吗?

添加后:

def set_product_delta_flag
Product.update_all ['delta = ?', true], ['subcategory_id = ?', id]
Product.index_delta
end

我总是收到这个错误:

NoMethodError(# 的未定义方法“index_delta”):

因此,这个问题的解决方案是将消息 *define_indexes* 发送到 Product 模型。

修复此问题后,一切正常,但 delta_index 未正确更新,我需要对子类别模型保存两次。

所以我的最终解决方案是这个:

after_commit :set_product_delta_flag

private

def set_product_delta_flag
Product.define_indexes
Product.update_all ['delta = ?', true], ['subcategory_id = ?', id]
Product.index_delta
end

使用after_commitdefine_indexes 是正确的解决方案吗?这是我找到的唯一一个。

最佳答案

请尝试以下操作:

def set_product_delta_flag
Product.update_all ['delta = ?', true], ['subcategory_id = ?', id]
Product.index_delta
end

单个 SQL 语句,单个增量重新索引。应该表现得更好:)

关于ruby-on-rails - 在 Thinking Sphinx 中使用增量索引进行关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4902804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com