用match_phrase解决match和term查询不能精确匹配的问题


term 查询

term 查询被用于精确值 匹配,这些精确值可能是数字、时间、布尔或者那些 not_analyzed 的字符串:

{ "term": { "age":    26           }}
{ "term": { "date":   "2014-09-01" }}
{ "term": { "public": true         }}
{ "term": { "tag":    "full_text"  }}

term 查询对于输入的文本不 分析 ,所以它将给定的值进行精确查询。


match 查询

无论你在任何字段上进行的是全文搜索还是精确查询,match 查询是你可用的标准查询。

如果你在一个全文字段上使用 match 查询,在执行查询前,它将用正确的分析器去分析查询字符串:

{ "match": { "tweet": "About Search" }}
如果在一个精确值的字段上使用它,   例如数字、日期、布尔或者一个  not_analyzed  字符串字段,那么它将会精确匹配给定的值:
{ "match": { "age":    26           }}
{ "match": { "date":   "2014-09-01" }}
{ "match": { "public": true         }}
{ "match": { "tag":    "full_text"  }}


但是在使用中发现一个问题,analyzed字段无法使用term

使用term时将无法匹配

用match_phrase解决match和term查询不能精确匹配的问题_第1张图片

使用match又会得到太多的结果:

用match_phrase解决match和term查询不能精确匹配的问题_第2张图片


这个时候可以用match_phrase解决问题:

用match_phrase解决match和term查询不能精确匹配的问题_第3张图片


你可能感兴趣的:(Elasticsearch)