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 |
我希望在结果中将位置名称索引为"位置"而不更改模型位置。
您需要在模型中提供
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 |