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