Несколько запросов Elasticsearch Inner_hits не дают ожидаемых результатов - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь получить содержимое дочернего документа, используя функцию внутренних попаданий поиска Elastic.Мой запрос содержит два предложения has_child, как показано в фрагменте кода ниже.Что я заметил, так это то, что во внутреннем ответе на попадание я получаю только те дочерние элементы, которые являются частью предложений второго потомка.Похоже, последние внутренние попадания перезаписывают первые внутренние попадания.

Есть ли способ получить оба внутренних хита?

Вот запрос, который я использовал.

{  
   "query":{  
      "bool":{  
         "must":[

            {  
               "has_child":{  
                  "type":"subformcontent",
                  "query":{
                    "bool": {
                        "must": [
                            {
                                "term":{  
                                    "txt_1.raw":"Malayalam"
                                }
                            },
                            {
                                "term":{  
                                    "parent_field_id":"1000"
                                }
                            }
                        ]
                    }                                            
                  },
               "inner_hits":{  
                     "size":10
                  }                  
               }
            }, 
            {  
               "has_child":{  
                  "type":"subformcontent",
                  "query":{
                    "bool": {
                        "must": [
                            {
                                "term":{  
                                    "txt_1.raw":"Malayalam"
                                }
                            },
                            {
                                "term":{  
                                    "parent_field_id":"1001"
                                }
                            }
                        ]
                    }                                            
                  },
               "inner_hits":{  
                     "size":10
                  }
               }
            }
         ]
      }
   }

}

1 Ответ

0 голосов
/ 22 февраля 2019

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hits.html говорит

name

Имя, которое будет использоваться для определения конкретного внутреннего попадания в ответе.Полезно, когда в одном поисковом запросе было определено несколько внутренних попаданий.Значение по умолчанию зависит от того, в каком запросе определяется внутреннее попадание.Для запроса и фильтра has_child это дочерний тип, запрос и фильтр has_parent - это родительский тип, а вложенный запрос и фильтр - это вложенный путь.

Я полагаю, поскольку вы не определилиимя и документация говорят, что значением по умолчанию является тип для has_child, тогда вы можете просто определить имена для ваших запросов inner_hits.В противном случае оба они называются «подчиненным контентом» и, следовательно, они переопределяют друг друга.

{  
   "has_child":{  
      ...
      "inner_hits":{  
         "size":10,
         "name": "hits_1"
      }                  
   }
}, 
{  
   "has_child":{  
      ...
      "inner_hits":{  
         "size":10,
         "name": "hits_2"
      }
   }
}

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

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