关于ruby on rails:轮胎索引elasticsearch

Tire index elasticsearch

通过轮胎的 Elasticsearch 对我来说效果很好。我想就我在代码中遇到的问题提出建议。

1
2
3
4
  mapping do
    indexes :id, :index => :not_analyzed
    indexes :locality
  end

这是我的映射的一部分。locality 对应于模型中定义为

的方法

1
2
3
def locality
  self.locality.name
end

型号也

1
belongs_to :locality

所以,你可以观察到被调用的方法会陷入死循环。我有一个限制,由于我们想要避免的前端的相应更改,我无法更改映射中的名称位置。
一种替代方法是在 Locality 模型中定义一个方法,该方法给出

1
2
3
def locality_name
  self.name
end

我尝试在 to_indexed_json 中包含 locality_name 方法并尝试以这种方式映射但失败了。

1
2
3
4
5
6
7
mapping do
  indexes :id, :index => :not_analyzed
  indexes :locality do
    indexes :locality_name
  end

end

我希望在结果中将位置名称索引为"位置"而不更改模型位置。


您需要在模型中提供 to_indexed_json 的实现,以便为索引中的 locality 字段提供不同的值。在这个问题中有一些关于 to_indexed_json 的更多细节,但是这样的东西应该可以工作:

1
2
3
4
5
6
7
self.include_root_in_json = false
def to_indexed_json
  # Get the default json for the instance
  hash = as_json(:root => false)
  # Add a locality field mapped to the name of the locality
  hash.update(:locality => self.locality.name).to_json
end