2016-01-29 19 views
0

我的索引使用下面的映射:禁用分析

"mappings": { 
    "user": { 
    "properties": { 
     "address": { 
     "properties": { 
      "number": { 
      "type": "string" 
      }, 
      "street": { 
      "type": "string" 
      } 
     } 
     } 
    } 
    } 
} 

我使用下面的查詢

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "multi_match": { 
      "query": "mystreet 5", 
      "fields": "address.*" 
      } 
     } 
     ] 
    } 
    } 
} 

這將返回地方address.street等於mystreet OR address.number等於5因爲所有對象分析multi_match查詢。

但是,我寧願搜索確切的字符串。所以我想禁用查詢分析器。基本上我需要一個term查詢,查詢多個字段address.*

這可能嗎?

回答

1

您可能能夠達到這只是在你的multi_match查詢指定phrase型這樣

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "multi_match": { 
      "query": "mystreet 5", 
      "fields": "address.*", 
      "type": "phrase" 
      } 
     } 
     ] 
    } 
    } 
} 

這將匹配lincoln mystreet 5,但不會給你lincoln mystreetsome street 5

如果你正在尋找確切的完整場比賽像mystreet 5不應該匹配JFK mystreet 5,那麼你可以使用multi-fields和分析每個場的兩倍,一個與standard analyzer和其他與keyword analyzer

希望這會有所幫助!