2016-04-25 83 views
1

我使用bool查询来查询我的elasticsearch索引。查询本身具有与此类似的结构确定在bool查询中匹配哪个查询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" 
             }} 
         ] 
      } 
     } 
    } 

我希望能够识别所有这些查询中哪些是匹配结果的那一个(一个)。有没有一种弹性搜索的内置方法,允许这个或我必须手动执行它?

回答

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阵列与查询/匹配的IES文件的名称。

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

窍门Val!谢谢(: –

+0

很高兴它解决了! – Val