以下es过滤查询之间有什么区别? 1.为多种查询条件过滤上下文:
hash[key] << value
{
"query": {
"bool": {
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
}
答案 0 :(得分:0)
第一个查询用于仅在不同字段上使用AND
运算符进行过滤的情况。默认情况下,如果您以这种方式编写过滤查询,它将作为AND
操作执行。
在您的案例/场景中,第二个查询的功能与第一个查询完全相同(没有区别,只是做同一件事的两种方式), 但是 “还”可以这样做,以实现/覆盖使用许多不同的AND
和OR
组合的更复杂的过滤器用例。
请注意,在Elasticsearch中, AND 由must
表示,而 OR 由should
子句表示。
比方说,我想过滤一种情况,就像我希望所有文档都具有
您可能最终将不得不通过以下方式编写查询:
POST sometestindex/_search
{
"query":{
"bool":{
"filter":[
{
"bool":{
"should":[
{
"term":{
"dept.keyword":"101"
}
},
{
"bool":{
"must":[
{
"term":{
"dept.keyword":"101B"
}
},
{
"range":{
"price":{
"gte":150
}
}
}
]
}
}
],
"minimum_should_match": 1
}
}
]
}
}
}
简而言之,对于您的情况,第一个查询只是编写第二个查询的一种简便方法,但是,如果您具有更复杂的过滤器逻辑,则需要在过滤器中利用Bool查询,就像我在示例示例中提到的那样,在您的第二个查询中提到过。
希望如此!