2016-04-25 3 views
1

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

{ 
      "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, который позволяет это или мне нужно сделать это вручную?

ответ

1

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

{ 
     "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" 
], 
+0

Сделал трюк Val! Спасибо (: –

+0

Рад, что все получилось! – Val

Смежные вопросы