Несколько вложенных запросов по одному пути? - PullRequest
0 голосов
/ 19 ноября 2018

Допустим, у меня есть вложенная структура, подобная 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"
                      }
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

, но результат не тот, который я ожидал бы получить.Я знаю, что могу переместить условие BCc во внутренний вложенный запрос, но это не так.Может быть, чтобы упростить немного, я ожидал бы запрос как ниже:

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

будет A && B, но кажется, что это не так.Для запроса, с которым я борюсь, похоже, что второе вложенное условие опущено.

В запросах, которые мне нужно построить, могут быть сгруппированы вместе условия разных уровней, и каждое условие может использоваться несколько раз в разных группах.,Каков правильный подход для такого сценария?

РЕДАКТИРОВАТЬ: Кажется, что оба вложенных запроса работают на отдельных вложенных документов.Есть ли способ заставить их работать на одном и том же вложенном документе и сохранить структуру запроса (два вложенных запроса, а не один)?Таким образом, если первый вложенный запрос имеет условие Aa = 1, а второй вложенный - Ab = 2, результатом будет Aa = 1 && Ab = 2, вставленное из Aa = 1 || Ab= 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...