在elasticsearch中的另一个布尔查询中执行嵌套布尔查询

时间:2013-11-25 07:00:35

标签: elasticsearch

我想在另一个布尔查询中嵌套一个带有多个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&amp; 4在第一级本身是“与”并且与第1级和第1级进行“或”运算。 2.请帮我重新排列/重写此查询,以实现预期的行为。

提前致谢

1 个答案:

答案 0 :(得分:1)

AFAIK,elasticsearch没有和/或类似布尔代数中的那个。最后总会有一个级别。

所以,在你的查询中,你基本上说“我需要3个必须查询”,所以那3个必须查询的组合结果将在最后的回复中。

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

  • 将所有必须转换为
  • 如果你需要并且将那些应该"minumum_should_match:N"规则,其中N是一个整数

指南: