首页 > 编程 > Java > 正文

elasticsearch中term与match的区别讲解

2019-11-26 09:15:18
字体:
来源:转载
供稿:网友

elasticsearch 中term与match区别

  • term是精确查询
  • match是模糊查询

term查询

term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词,所以我们的搜索词必须是文档分词集合中的一个。比如说我们要找标题为北京奥运的所有文档

$curl -XGET http://localhost:9200/index/doc/_search?pretty -d '{ "query":{  "term":{    "title":"北京奥运"  } }}'

将会得到如下结果

{  "took": 1,  "timed_out": false,  "_shards": {    "total": 5,    "successful": 5,    "failed": 0  },  "hits": {  "total": 1,  "max_score": 0.92055845,  "hits": [   {    "_index": "index",    "_type": "doc",    "_id": "3",    "_score": 0.92055845,    "_source": {      "content": "同一个世界同一个梦想",      "title": "北京奥运",      "tags": [        "和平"      ]    }   }  ] }}

match类查询

match查询会先对搜索词进行分词,分词完毕后再逐个对分词结果进行匹配,因此相比于term的精确搜索,match是分词匹配搜索,match搜索还有两个相似功能的变种,一个是match_phrase,一个是multi_match,接下来详细介绍一下

match

前面提到match搜索会先对搜索词进行分词,对于最基本的match搜索来说,只要搜索词的分词集合中的一个或多个存在于文档中即可,例如,当我们搜索中国杭州,搜索词会先分词为中国和杭州,只要文档中包含搜索和杭州任意一个词,都会被搜索到

$curl -XGET http://localhost:9200/index/doc/_search?pretty -d '{  "query": {    "match": {      "content": "中国杭州"    }  }}'

文档3正文中有杭州,文档2中有中国,因此搜索结果有两个,文档3中杭州出现两次,所以排在前面,结果如下:

{ "took" : 1, "timed_out" : false, "_shards" : {  "total" : 5,  "successful" : 5,  "failed" : 0 }, "hits" : {   "total" : 2,   "max_score" : 0.99999994,   "hits" : [ {      "_index" : "index",      "_type" : "doc",      "_id" : "4",      "_score" : 0.99999994,      "_source" : {         "content" : "杭州是一个美丽的城市,欢迎来到杭州",        "title" : "宣传",        "tags" : [ "旅游", "城市" ]      }    }, {      "_index" : "index",      "_type" : "doc",      "_id" : "2",      "_score" : 0.8838835,      "_source" : {         "content" : "中国是世界上人口最多的国家",         "title" : "中国",         "tags" : [ "中国", "人口" ]      }    } ]  }}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对武林网的支持。如果你想了解更多相关内容请查看下面相关链接

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表