2013-07-24 53 views
0

Elasticsearch轮胎对我来说工作得很好。我想要一个关于我在代码中遇到的问题的建议。轮胎指数elasticsearch

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

这是我mapping.locality的一部分对应于模型的方法,其被定义为

def locality 
    self.locality.name 
end 

该模型还

belongs_to :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 

我想在不改变模型地点的情况下将地点的名称作为“地点”进行索引。

回答

0

您需要在模型中提供to_indexed_json的实现,以便为索引中的地点字段提供不同的值。有在this questionto_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 
+0

有哪些我还没有和这包括在to_indexed_json.Will他们被跳过的映射也定义的其他属性和方法? – user2512324

+0

我已经用一些评论更新了答案代码。它基本上将本地化参数添加到json以及模型的默认json中。您可以进一步扩展它来提供或排除其他领域。 – Shadwell

+0

工作像一个魅力..感谢很多 – user2512324