elasticsearch 中term与match区别
- term是精确查询
- match是模糊查询
term查询
term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词,所以我们的搜索词必须是文档分词集合中的一个。比如说我们要找标题为北京奥运的所有文档
1
2
3
4
5
6
7
8
|
$curl -xget http: //localhost:9200/index/doc/_search?pretty -d '{ "query" :{ "term" :{ "title" : "北京奥运" } } }' |
将会得到如下结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
{ "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搜索来说,只要搜索词的分词集合中的一个或多个存在于文档中即可,例如,当我们搜索中国杭州,搜索词会先分词为中国和杭州,只要文档中包含搜索和杭州任意一个词,都会被搜索到
1
2
3
4
5
6
7
8
|
$curl -xget http: //localhost:9200/index/doc/_search?pretty -d '{ "query" : { "match" : { "content" : "中国杭州" } } }' |
文档3正文中有杭州,文档2中有中国,因此搜索结果有两个,文档3中杭州出现两次,所以排在前面,结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
{ "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" : [ "中国" , "人口" ] } } ] } } |
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/sxf_123456/article/details/78845437