多个嵌套查询到达同一路径?

时间:2018-11-19 19:08:07

标签: elasticsearch

假设我有一个嵌套结构,例如A-> B-> C 我正在尝试创建一种查询构建器,以允许

这样的查询
(A.a = 1 && A.B.b =2) || (A.B.b = 4 && A.B.C.c = 1)

或更复杂。为此,我使用了与同一路径相关的多个嵌套查询

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "term": {
                  "a": {
                    "value": "1"
                  }
                }
              },
              {
                "nested": {
                  "path": "B",
                  "query": {
                    "term": {
                      "B.b": {
                        "value": "2"
                      }
                    }
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "nested": {
                  "path": "B",
                  "query": {
                    "term": {
                      "B.b": {
                        "value": "4"
                      }
                    }
                  }
                }
              },
              {
                "nested": {
                  "path": "B.C",
                  "query": {
                    "term": {
                      "B.C.c": {
                        "value": "1"
                      }
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

但是结果不是我期望的那样。我知道我可以将B.C.c条件移动为内部嵌套查询,但事实并非如此。也许要简化一下,我希望查询如下:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested"....
        },
        {
          "nested" to the same path as index 0
        }
      ]
    }
  }
}

成为A && B,但事实并非如此。对于查询,我很努力,似乎省略了第二个嵌套条件。

我需要构建的查询可能会将来自不同级别的条件分组在一起,并且每个条件可能在不同的组中多次使用。在这种情况下正确的方法是什么?

编辑: 似乎两个嵌套查询都在单独的嵌套文档上工作。是否有办法使它们在同一嵌套文档上运行并保留查询结构(两个嵌套查询,而不是一个)?因此,如果第一个嵌套查询的条件为A.a = 1,第二个嵌套查询的条件为A.b = 2,则结果为 A.a = 1 && A.b = 2个A.a = 1 || A.b = 2

0 个答案:

没有答案