эластичный поисковый запрос, более одного объекта должны удовлетворять условиям - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть несколько вопросов о вложенном запросе.Вот мой пример.Сопоставление: {"user":"nested"}. Существующие данные выглядят так:

{
  "user": [
    {
      "first":"John",
      "last":"Smith"
    },
    {
      "first":"Alice",
      "last":"White"
    }
  ]
}

Как создать запрос для поиска этого документа, который удовлетворяет всем условиям:

  1. первыйобъект пользователя, что его "first" - это "John", а "last" - "Smith";
  2. второй объект user, для которого его "first" - "Alice", а "last" - "White"

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Ниже запрос - это то, что вы ищете.Вам просто нужно иметь два nested queries, по одному для каждого упомянутого вами условия, объединенного в bool с использованием предложения must.

Обратите внимание, что я предполагаю, что поля user.first иuser.last имеют текст type, имеющий standard analyzer

POST <your_index_name>
{  
   "query":{  
      "bool":{  
         "must":[  
            {  
               "nested":{  
                  "path":"user",
                  "query":{  
                     "bool":{  
                        "must":[  
                           {  
                              "match":{  
                                 "user.first":"john"
                              }
                           },
                           {  
                              "match":{  
                                 "user.last":"smith"
                              }
                           }
                        ]
                     }
                  }
               }
            },
            {  
               "nested":{  
                  "path":"user",
                  "query":{  
                     "bool":{  
                        "must":[  
                           {  
                              "match":{  
                                 "user.first":"alice"
                              }
                           },
                           {  
                              "match":{  
                                 "user.last":"white"
                              }
                           }
                        ]
                     }
                  }
               }
            }
         ]
      }
   }
}

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

0 голосов
/ 31 декабря 2018

Попробуйте с запросом ниже:

{  
   "query":{  
      "bool":{  
         "filter":[  
            {  
               "bool":{  
                  "must":[  
                     {  
                        "bool":{  
                           "must":[  
                              {  
                                 "nested":{  
                                    "query":{  
                                       "bool":{  
                                          "must":[  
                                             {  
                                                "match_phrase":{  
                                                   "user.first":{  
                                                      "query":"John"
                                                   }
                                                }
                                             },
                                             {  
                                                "match_phrase":{  
                                                   "user.last":{  
                                                      "query":"Smith"
                                                   }
                                                }
                                             }
                                          ]
                                       }
                                    },
                                    "path":"user"
                                 }
                              },
                              {  
                                 "nested":{  
                                    "query":{  
                                       "bool":{  
                                          "must":[  
                                             {  
                                                "match_phrase":{  
                                                   "user.first":{  
                                                      "query":"Alice"
                                                   }
                                                }
                                             },
                                             {  
                                                "match_phrase":{  
                                                   "user.last":{  
                                                      "query":"White"
                                                   }
                                                }
                                             }
                                          ]
                                       }
                                    },
                                    "path":"user"
                                 }
                              }
                           ]
                        }
                     }
                  ]
               }
            }
         ]
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...