您的当前位置:首页正文

elasticsearch中term与match的区别讲解

2024-10-18 来源:威能网
elasticsearch中term与match的区别讲解

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\" : [ \"中国\⼈⼝\" ] } } ] }}

总结

以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,谢谢⼤家对的⽀持。如果你想了解更多相关内容请查看下⾯相关链接

因篇幅问题不能全部显示,请点此查看更多更全内容