Вложенный bool-запрос с несколькими must и must - PullRequest
1 голос
/ 25 марта 2019

Посмотрите на мой вариант использования ниже

Два вложенных поля

base1.point1
base1.point2
base1.point3
base1.point4

и

base2.point1
base2.point2
base2.point3
base2.point4

условие поиска

(
  (base1.point1 AND base1.point2) OR (base1.point2 AND base1.point3)
)
AND
(
  (base2.point1 AND base2.point2) OR (base2.point2 AND base2.point3)
)

Пожалуйста, помогите написать выше в одном запросе.

1 Ответ

0 голосов
/ 25 марта 2019

Обратите внимание, что я предполагаю, что когда вы имели в виду вложенность, вы на самом деле говорите о Вложенный тип данных , а не просто Тип данных объекта

Также, глядя на ваш вопрос, вас интересует, существуют ли вложенные поля, независимо от их значений. Для таких случаев вы должны использовать Exists Query .

Ниже показано, как будет выглядеть вложенный запрос :

POST <you_index_name>/_search
{  
   "query":{  
      "bool":{  
         "must":[  
            {  
               "bool":{  
                  "should":[  
                     {  
                        "bool":{  
                           "must":[  
                              {  
                                 "nested":{  
                                    "path":"base1",
                                    "query":{  
                                       "exists":{  
                                          "field":"base1.point1"
                                       }
                                    }
                                 }
                              },
                              {  
                                 "nested":{  
                                    "path":"base1",
                                    "query":{  
                                       "exists":{  
                                          "field":"base1.point2"
                                       }
                                    }
                                 }
                              }
                           ]
                        }
                     },
                     {  
                        "bool":{  
                           "must":[  
                              {  
                                 "nested":{  
                                    "path":"base1",
                                    "query":{  
                                       "exists":{  
                                          "field":"base1.point2"
                                       }
                                    }
                                 }
                              },
                              {  
                                 "nested":{  
                                    "path":"base1",
                                    "query":{  
                                       "exists":{  
                                          "field":"base1.point3"
                                       }
                                    }
                                 }
                              }
                           ]
                        }
                     }
                  ]
               }
            },
            {  
               "bool":{  
                  "should":[  
                     {  
                        "bool":{  
                           "must":[  
                              {  
                                 "nested":{  
                                    "path":"base2",
                                    "query":{  
                                       "exists":{  
                                          "field":"base2.point1"
                                       }
                                    }
                                 }
                              },
                              {  
                                 "nested":{  
                                    "path":"base1",
                                    "query":{  
                                       "exists":{  
                                          "field":"base2.point2"
                                       }
                                    }
                                 }
                              }
                           ]
                        }
                     },
                     {  
                        "bool":{  
                           "must":[  
                              {  
                                 "nested":{  
                                    "path":"base2",
                                    "query":{  
                                       "exists":{  
                                          "field":"base2.point2"
                                       }
                                    }
                                 }
                              },
                              {  
                                 "nested":{  
                                    "path":"base2",
                                    "query":{  
                                       "exists":{  
                                          "field":"base2.point3"
                                       }
                                    }
                                 }
                              }
                           ]
                        }
                     }
                  ]
               }
            }
         ]
      }
   }
}

Надеюсь, это поможет!

...