我是Elasticsearch的新手,我需要在查询中添加OR
条件的帮助。我目前有这个查询。
{
:query=>{
:bool=>{
:must=>[{
:query_string=>{
:default_operator=>"AND",
:query=>"*"
}
}]
}
},
:filter=>{
:and=>[{
:term=>{
:partner_id=>26
}
},
{:term=>{
:is_unpublished=>"false"}
}]
}
}
目前,它当前接受26
,但是如果我有2个值怎么办?例如。 26和36,如何在OR条件下添加36
?
如果这是SQL,它将是这样的:
SELECT * FROM table WHERE (partner_id = 26 OR partner_id = 36) AND is_unpublished = false
我尝试了以下方法,但是没有运气:
{:term => {:partner_id => 36}, :or => [:term => {:partner_id => 26}]}
这也没有运气:
{:term => {:or =>[{:partner_id => 26},{:partner_id => 36}]}}
答案 0 :(得分:1)
使用“应该”吗?
"should" : [
{ "term" : { "tag" : "wow" } },
{ "term" : { "tag" : "elasticsearch" } }
]
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
答案 1 :(得分:1)
将should视为OR
运算符,并用query bool
映射包装:
{
"query": {
"bool" : {
"must" : {
"term" : { "company" : "stackoverflow" }
},
"filter": {
"term" : { "parner.is_published" : 1 }
},
"should" : [
{ "term" : { "partner.age" : 26 } },
{ "term" : { "partner.age" : 36 } }
],
"minimum_should_match" : 1
}
}
}
minimum_should_match
是关键,它是您希望Elasticsearch匹配的OR
中有多少条件。
此外,这也不是解决方案的一部分,但我认为与您有关,如果您仍在考虑使用SQL方式,请查看ES SQL style。
答案 2 :(得分:0)
您还可以使用以下代码。
"should" : [
{ "term" : {
"fields": ["tag"],
"query: "wow OR elasticsearch"
}
}
]