2016-05-11 58 views
1

我想知道是否可以根据代码中的某些条件构建查询。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不是零/出现在我的方法。

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

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

感谢

+0

我不认为你可以像编程方式那样做,但是需要在查询本身中做到这一点。 –

+0

哦,我误解了你的问题:-)。这只是在你的代码... –

回答

1

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

# 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) 
+0

完美的答案!不知道我可以使用的语法:'查询[:查询] [:布尔] [:必须]'谢谢! –