Определите, какой запрос согласован в bool query elasticsearch

Я запрашиваю свой индекс elasticsearch с помощью запроса bool . Сам запрос имеет структуру, подобную этой

  { "query": { "bool": { "should": [ {"multi_match": { "fields": ["field1", "field2"], "query": self.cleaned_stemmed_phrase, "type": "phrase", "fuzziness":"AUTO" }}, {"multi_match": { "fields": ["field3"], "query": self.cleaned_stemmed_phrase, "fuzziness":"AUTO", "boost": 4 }}, {"multi_match": { "fields": ["field4"], "query": self.cleaned_stemmed_phrase, "fuzziness":"AUTO" }}, {"multi_match": { "fields": ["field5", "filed6"], "query": self.spaces_removed, "fuzziness":"AUTO" }}, {"multi_match": { "fields": ["field7", "field8"], "query": self.no_space_stems, "fuzziness":"AUTO" }} ] } } } 

Я хочу иметь возможность определить, какой из этих запросов был тем, который соответствует результатам. Есть ли встроенный метод elasticsearch, который позволяет это или мне нужно сделать это вручную?

Вы можете использовать именованные запросы, а затем в результатах вы получите имя соответствующего запроса.

 { "query": { "bool": { "should": [ {"multi_match": { "fields": ["field1", "field2"], "query": self.cleaned_stemmed_phrase, "type": "phrase", "fuzziness":"AUTO", add name ---> "_name": "query1" }}, {"multi_match": { "fields": ["field3"], "query": self.cleaned_stemmed_phrase, "fuzziness":"AUTO", "boost": 4, add name ---> "_name": "query2" }}, {"multi_match": { "fields": ["field4"], "query": self.cleaned_stemmed_phrase, "fuzziness":"AUTO", add name ---> "_name": "query3" }}, {"multi_match": { "fields": ["field5", "filed6"], "query": self.spaces_removed, "fuzziness":"AUTO", add name ---> "_name": "query4" }}, {"multi_match": { "fields": ["field7", "field8"], "query": self.no_space_stems, "fuzziness":"AUTO", add name ---> "_name": "query5" }} ] } } } 

Затем в результатах вы получите массив matched_queries с именем запросов / элементов, которые соответствуют документу.

 "_source": { ... }, "matched_queries": [ "title_query" ],