轮胎指数弹性搜索

时间:2013-07-24 12:03:01

标签: ruby-on-rails mapping elasticsearch tire

Elasticsearch通过轮胎对我来说很好。我想要一个关于我在代码中遇到的问题的建议。

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

这是我的mapping.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”。

1 个答案:

答案 0 :(得分:0)

您需要在模型中提供to_indexed_json的实现,以便为索引中的locality字段提供不同的值。 this question中有关于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
相关问题