如何在Rails中存储大的JSON哈希值

时间:2015-11-15 18:13:52

标签: ruby-on-rails ruby elasticsearch

我正在使用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_idtag_id。还有其他想法吗?

如果有人熟悉这些宝石并知道宝石的search方法是否接受其他格式,我也想知道。在我看来,它只是想要一些可以变成哈希的东西。

1 个答案:

答案 0 :(得分:0)

我认为使用方法很好。我会将搜索与查询分开:

def query_for(input, question_id, tag_id)
  query = {
    :query => {
    ...
end

search query_for(input, question_id, tag_id)

另外,我看到这个搜索功能在用户模型中,但我想知道它是否属于那里。拥有SearchQuery模型会更有意义吗?