如何写一个bool查询“(A & B)|ElasticSearch中的C”条件

1tu0hz3e  于 6个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(50)

在这个问题之后:bool query - must and should on same level, what does it means?我想知道如何在elasticsearch中使用bool查询实现简单的逻辑查询:(A & B) | C其中ABC都是需要与bool组合的匹配查询。
如果我没有理解错的话,bool查询中的should子句只会让那些结果的分数更高,如果是这样的话,我怎么才能实现“或”关系呢?
假设A、B和C都是数字范围,所以类似于(伪代码):

(x >= 4 & x<=6) | x=2

字符串
由此,我期望得到2,4,5,6的潜在结果集(="* 给予我4到6之间的所有数字,但2也可以 *”)-但情况并非如此,因为如果“&”表示“必须”-那么“and”和“or”部分相互矛盾(这是我从比我更了解elasticsearch的人那里理解的)。
所以也许我不明白elasticsearch布尔查询是如何工作的,我不知道。一个可以实现上述情况的工作示例也将受到高度赞赏。
例如,下面的方法不起作用,只产生4,5,6的结果集:

{'query': {'bool': {'should': [{'bool': {'must': [{'range': {'x': {'gte': 4}}}, {'range': {'x': {'lte': 6}}}]}}, {'match': {'x': 2}}]}}}

ff29svar

ff29svar1#

看起来你做的一切都是正确的。尝试以下操作。

POST _bulk
{"index":{"_index":"test","_id":"2"}}
{"x":2}
{"index":{"_index":"test","_id":"4"}}
{"x":4}
{"index":{"_index":"test","_id":"5"}}
{"x":5}
{"index":{"_index":"test","_id":"6"}}
{"x":6}
{"index":{"_index":"test","_id":"7"}}
{"x":7}
{"index":{"_index":"test","_id":"8"}}
{"x":8}
{"index":{"_index":"test","_id":"9"}}
{"x":9}
{"index":{"_index":"test","_id":"10"}}
{"x":10}
{"index":{"_index":"test","_id":"11"}}
{"x":11}
{"index":{"_index":"test","_id":"12"}}
{"x":12}

字符串

POST test/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "range": {
                  "x": { "gte": 4 }
                }
              },
              {
                "range": {
                  "x": { "lte": 6 }

                }
              }
            ]
          }
        },
        {
          "match": {"x": 2}
        }
      ]
    }
  }
}


输出:4,5,6,2如预期。
x1c 0d1x的数据

相关问题