我想在另一个 bool(boolean) 查询中嵌套一个 bool(boolean) 查询,该 bool(boolean) 查询具有多个must / should来获得嵌套的AND / OR查询字符串,如以下查询中所示。

{
  "query": {
    "bool": {
      "should": [
        **// SHOULD BLOCK 1**
        {
          <should_query_1>
        },
        **// SHOULD BLOCK 2**
        {
          <should_query_2>
        },
        **// SHOULD BLOCK 3**
        {
          "bool": {
            "must": [
              <should_level_2_MUST_query_1>,
              <should_level_2_MUST_query_2>,
          {
        "bool": {
          "must": [
            <should_level_3_MUST_query_1>,
            <should_level_3_MUST_query_2>,
          ]
        }
          }
            ]
          }
        },
        **// SHOULD BLOCK 4**
        {
          "bool": {
            "must": [
              <should_MUST_query_1>,
              <should_MUST_query_2>
            ]
          }
        }
      ]
    }
  },
  "size": 25,
  "from": 0,
  "fields": []
}

预期的行为是,我希望对“应该”块1、2、3、4进行“或”操作,并且在“应该阻止3”中,我希望对“Should_level_2_MUST_queries”进行“与”操作。

但是实际上,当我使用这种语法时,应该在第一级中对“3”和“4”块进行“与”运算,并与“1”和“2”块进行“或”运算。请帮我重新排列/重写此查询,以实现预期的性能。

提前致谢

最佳答案

AFAIK,elasticsearch没有和/或没有 bool(boolean) 代数中的水平。最后总是有一个层次。

因此,在您的查询中,您基本上会说“我需要3个必须查询”,因此这3个必须查询的组合结果将出现在最终响应中。

如果我正确理解它,那么为了达到预期的行为,您应该执行以下操作:

  • 将所有必需品转换为
  • 如果您需要AND并应放置那些"minumum_should_match:N"规则,其中N是整数

  • 指南:
  • How to use minumum should match?
  • 关于elasticsearch - 在Elasticsearch的另一个 bool 查询中执行嵌套的 bool 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20186441/

    10-13 07:46
    查看更多