2016-04-20 84 views
1

有彈性搜索以下查詢:Multi_match和匹配查詢我一起

{ 
    "query": { 
    "multi_match": { 
     "query": "bluefin bat", 
     "type": "phrase", 
     "fields": [ 
     "title^5", 
     "body.value" 
     ] 
    } 
    }, 
    "highlight": { 
    "fields": { 
     "body.value": { 
     "number_of_fragments": 3 
     } 
    } 
    }, 
    "fields": [ 
    "title", 
    "id" 
    ] 
} 

我一直在使用「dis_max」試過,但然後我的兩個字段必須搜索相同的查詢。 剩餘的匹配查詢具有不同的查詢文本。

剩下的匹配查詢是這樣的:

{ 
    "query": { 
    "match": { 
     "ingredients": "key1, key2", 
     "analyzer": "keyword_analyzer" 
    } 
    } 
} 

我怎麼能這兩個查詢集成,而不使用dis_max加盟。

回答

2

我想出了答案。 multi_match內部適用:

"dis_max" 

因此,你不能用multi_match適用dis_max。 但我能做的是我可以應用bool查詢來解決這類問題。

我可以申請should其實際轉換爲OR布爾值或我可以應用must相當於AND

所以這是我如何改良我的查詢:

{ 
    "query": { 
    "bool":{ 
     "should": [ 
     {"multi_match": 
      {"query": "SOME_QUERY", 
      "type": "phrase", 
      "fields": ["title^5","body"] 
      } 
     }, 
     { 
      "match":{ 
      "labels" :{ 
      "query": "SOME_QUERY", 
      "analyzer": "keyword_analyzer" 
      } 
      } 
     }, 
     { 
      "match":{ 
      "displayName" :{ 
      "query": "SOME_QUERY", 
      "fuzziness": "AUTO" 
      } 
      } 
     } 
     ], 
     "minimum_number_should_match": "50%" 
    } 
    }, 
    "fields": ["title","id","labels","displayName","username"], 
    "highlight": { 
    "fields": { 
     "body.storage.value": { 
     "number_of_fragments": 3} 
    } 
    } 
} 

我希望這可以幫助別人的未來。