0

通过轮胎进行弹性搜索对我来说效果很好。我想要一个关于我在代码中遇到的问题的建议。

  mapping do
    indexes :id, :index => :not_analyzed
    indexes :locality
  end

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

def locality
  self.locality.name
end

该模型还

belongs_to :locality

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

def locality_name
  self.name
end

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

mapping do
  indexes :id, :index => :not_analyzed
  indexes :locality do
    indexes :locality_name
  end

end

我希望在不更改模型 Locality 的情况下,在结果中将 locality 的名称索引为“locality”。

4

1 回答 1

0

您需要to_indexed_json在模型中提供一个实现,以便为索引中的 locality 字段提供不同的值。to_indexed_json这个问题中有一些更多的细节,但这样的事情应该有效:

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
于 2013-07-24T12:34:29.573 回答