2016-01-29 17 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

希望这会有所帮助!