ES termQuery和matchQuery区别浅析

看官方提供的例子:

1. 

PUT my_index  
{  
  "mappings": {  
    "my_type": {  
      "properties": {  
        "full_text": {  
          "type":  "string"    
        },  
        "exact_value": {  
          "type":  "string",  
          "index": "not_analyzed"    
        }  
      }  
    }  
  }  
}  

首先设置索引名称为my_index,类型为my_type的映射,设置该索引的full_text字段类型为String,exact_value字段类型为String, "index": "not_analyzed"表示该字段不分词。

2. 添加一条数据:

PUT my_index/my_type/1  
{  
  "full_text":   "Quick Foxes!",    
  "exact_value": "Quick Foxes!"     
}

索引名为my_index,类型为my_type,id为1。full_text字段的值为Quick Foxes!,exact_value字段的值为Quick Foxes!。

注:

string字段可以分词,也可以不分词。分词的时候,默认的标准分析器可以将一句话中的单词划分开,然后转为小写,比如Quick Brown Fox!,标准分析器将会将它转换为quick , brown , fox。

由于full_text字段分词,因此在倒排索引中被默认标准分析器分为quick , foxes。

exact_value字段不分词,在倒排索引中该字段的值仍为QuickFoxes!。

3. 执行查询:

3.1 使用term查询exact_value,搜索内容为Quick Foxes!:

GET my_index/my_type/_search  
{  
  "query": {  
    "term": {  
      "exact_value": "Quick Foxes!"    
    }  
  }  
}  

由于exact_value不分词,Quick Foxes!与exact_value的值QuickFoxes!匹配,因此可以匹配。

3.2 使用term查询full_text,搜索内容为Quick Foxes!:

GET my_index/my_type/_search  
{  
  "query": {  
    "term": {  
      "full_text": "Quick Foxes!"    
    }  
  }  
}  

由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,因此使用Quick Foxes!匹配不到内容。

3.3 使用term查询full_text,搜索内容为foxes:

GET my_index/my_type/_search  
{  
  "query": {  
    "term": {  
      "full_text": "foxes"    
    }  
  }  
}  

由于full_text字段默认使用标准分析器分词,在倒排索引中被分为quick和foxes,因此使用foxes可以匹配到。

3.4 使用match查询full_text,查询内容为Quick Foxes!:

GET my_index/my_type/_search  
{  
  "query": {  
    "match": {  
      "full_text": "Quick Foxes!"    
    }  
  }  
}  

使用match搜索,先分析搜索字符串Quick Foxes!,对它分词,然后搜索full_text中含有quick或者foxes或者两者都包含的文档,由于full_text字在倒排索引中被分为quick和foxes,因此可以匹配到。

 

总结:

match query搜索的时候,首先会解析查询字符串,进行分词,然后查询,而term query,输入的查询内容是什么,就会按照什么去查询,并不会解析查询内容,对它分词。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值