ElasticSearch根据条件构建查询

时间:2016-05-11 14:39:52

标签: ruby-on-rails ruby elasticsearch

我想知道是否可以根据我的代码中的某些条件构建查询。

self.search(query: {
                    bool: {
                      must: [
                        { term: { country_id: country_id }},
                        { term: { region_id: region_id }} => if region_id is not nil
]
                    }
                  }

在这个例子中,我想添加一行:

{ term: { region_id: region_id }}

只有在我的方法中,region_id不是nil / present。

在SQL中,我可以使用多行和条件构建查询。 我可以用ES做同样的事吗?

信息:在这里工作的红宝石

由于

1 个答案:

答案 0 :(得分:2)

您需要创建一个查询变量来构建查询,并有条件地添加所需的元素(术语)。试一试:

# Start with a base search definition
query = { 
  query: {
    bool: {
      must: [
        { term: { country_id: country_id }}
      ]
    }
  }
}

# Conditionally add search terms
if region_id is not nil
  query[:query][:bool][:must] << { term: { region_id: region_id }}
end

# Execute the search
self.search(query)