我正在使用elasticsearch-rails
gem和elasticsearch-model
gem并编写一个恰好因为gem接受查询的方式而非常庞大的查询。
查询本身不是很长,但它是非常非常长的过滤器,我需要传入变量来正确过滤掉结果。这是一个例子:
def search_for(input, question_id, tag_id)
query = {
:query => {
:filtered => {
:query => {
:match => {
:content => input
}
},
:filter => {
:bool => {
:must => [
{
# another nested bool with should
},
{
# another nested bool with must for question_id
},
{
# another nested bool with must for tag_id
}
]
}
}
}
}
}
User.search(query) # provided by elasticsearch-model gem
end
为了简洁起见,我省略了其他嵌套的bool,但正如你可以想象的那样,这可以很快地完成。
有没有人对如何储存这个有什么想法?我在想一个yml文件,但似乎错了,特别是因为我需要传入question_id
和tag_id
。还有其他想法吗?
如果有人熟悉这些宝石并知道宝石的search
方法是否接受其他格式,我也想知道。在我看来,它只是想要一些可以变成哈希的东西。
答案 0 :(得分:0)
我认为使用方法很好。我会将搜索与查询分开:
def query_for(input, question_id, tag_id)
query = {
:query => {
...
end
search query_for(input, question_id, tag_id)
另外,我看到这个搜索功能在用户模型中,但我想知道它是否属于那里。拥有Search
或Query
模型会更有意义吗?