温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Elasticsearch聚合查询及排序的方法

发布时间:2022-04-19 15:15:11 来源:亿速云 阅读:288 作者:iii 栏目:开发技术

这篇“Elasticsearch聚合查询及排序的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Elasticsearch聚合查询及排序的方法”文章吧。

1 es排序

# 1 排序 GET jeff/doc/_search {   "query": {     "match": {       "from": "gu"     }   },    "sort": [     {       "age": {         "order": "desc"       }     }   ] } # 升序 GET jeff/doc/_search {   "query": {     "match": {       "from": "gu"     }   },    "sort": [     {       "age": {         "order": "asc"       }     }   ] } # 并不是所有类型都支持排序(只允许数字类型做排序) GET jeff/doc/_search {   "query": {     "match": {       "from": "gu"     }   },    "sort": [     {       "name": {         "order": "asc"       }     }   ] }

2 match和match的区别

# match和match_all的区别? mach表示要查询,根据字段查,match_all查所有 GET jeff/doc/_search {   "query": {     "match_all": {}   } }

3 分页查询

GET jeff/doc/_search {   "query": {     "match_all": {}   },   "sort": [     {       "age": {         "order": "desc"       }     }   ],    "from": 2,   "size": 1 } #   "from": 2,代表从第二条开始, 取一条"size": 1 # 有了这个查询,如何分页? 一页有10条数据 第一页:   "from": 0,   "size": 10 第二页:   "from": 10,   "size": 10 第三页:   "from": 20,   "size": 10

4 es 组合查询

# 多个条件,and ,or ,not # 对到es中就是布尔查询,must,should,must_not,filter must  ---  and  should --- or must_not --- not filter --- 过滤 # 1 组合查询之must # 查询form gu和age=30的数据 GET gyy/doc/_search {   "query": {     "bool": {       "must": [         {           "match": {             "from": "gu"           }         },         {           "match": {             "age": "30"           }         }       ]     }   } } # 查询form gu数据() GET gyy/doc/_search {   "query": {     "bool": {       "must": [         {           "match": {             "from": "gu"           }         }       ]     }   } } # 同上 GET gyy/doc/_search {   "query": {     "match": {       "from": "gu"     }   } } # 2 组合查询之should,或者的条件 GET gyy/doc/_search {   "query": {     "bool": {       "should": [         {           "match": {             "from": "gu"           }         },         {           "match": {             "tags": "闭月"           }         }       ]     }   } } # 3 组合查询之must_not  取反 GET gyy/doc/_search {   "query": {     "bool": {       "must_not": [         {           "match": {             "from": "gu"           }         },         {           "match": {             "tags": "可爱"           }         },         {           "match": {             "age": 18           }         }       ]     }   } } # `filter`条件过滤查询,过滤条件的范围用`range`表示,`gt`表示大于,大于多少呢 # gt:大于   lt:小于  get:大于等于   let:小于等于 GET gyy/doc/_search {   "query": {     "bool": {       "must": [         {           "match": {             "from": "gu"           }         }       ],       "filter": {         "range": {           "age": {             "gt": 25           }         }       }     }   } } # 查询年龄小于等于18的所有数据 GET gyy/doc/_search {   "query": {     "bool": {       "filter": {         "range": {           "age": {             "lte": 18           }         }       }     }   } }

5 结果过滤展示字端

# 对结果进行过滤,类似于如下 select * from user; select name,age from user; # 对应到es的查询 GET gyy/doc/_search {   "query": {     "match": {       "name": "顾老二"     }   },   "_source": ["name", "age"] }

6 结果高亮展示

# 3 结果高亮显示(默认情况) GET gyy/doc/_search {   "query": {     "match": {       "name": "石头"     }   },   "highlight": {     "fields": {       "name": {}     }   } } # 定制高亮显示的样式 GET gyy/chengyuan/_search {   "query": {     "match": {       "from": "gu"     }   },   "highlight": {     "pre_tags": "<b class='key' style='color:red'>",     "post_tags": "</b>",     "fields": {       "from": {}     }   } }

小结:

混合开发,你知道怎么处理

前后端分离,你怎么处理?

<b class='key' style='color:red'>串直接以josn格式返回,前端自行渲染

用的最多就是match+布尔+高亮+分页

7 聚合查询avg、max、min、sum、分组

# 聚合查询 # 1 聚合查询之avg select max(age) as my_avg from user; GET gyy/doc/_search {   "query": {     "match": {       "from": "gu"     }   },   "aggs": {     "my_avg": {       "avg": {         "field": "age"       }     }   },   "_source": ["name", "age"] } # 2 聚合查询之max,size=0表示不取数据,只要max的结果 GET gyy/doc/_search {   "query": {     "match": {       "from": "gu"     }   },   "aggs": {     "my_max": {       "max": {         "field": "age"       }     }   },   "size": 0 } # 3 聚合之min GET gyy/doc/_search {   "query": {     "match": {       "from": "gu"     }   },   "aggs": {     "my_min": {       "min": {         "field": "age"       }     }   },   "size": 0 } # 4 聚合查询之sum GET gyy/doc/_search {   "query": {     "match": {       "from": "gu"     }   },   "aggs": {     "my_sum": {       "sum": {         "field": "age"       }     }   },   "size": 0 } # 5 聚合之分组 GET gyy/doc/_search {   "size": 0,    "query": {     "match_all": {}   },   "aggs": {     "age_group": {       "range": {         "field": "age",         "ranges": [           {             "from": 15,             "to": 20           },           {             "from": 20,             "to": 25           },           {             "from": 25,             "to": 30           }         ]       }     }   } }

8 mapping和_template模版

GET _template/user_instagram  # 查看模版 PUT _template/user_instagram  # 修改模版 {跟字段信息数据} GET user_instagram/_mapping  # 查看索引信息 PUT user_instagram/_mapping  # 修改索引信息 {跟字段信息数据}

模版中如果有name字段,存的时候会在索引中自动匹配

模版中如果没有age字段,存的时候索引找不到字段,存不进去。

需要现在模版中添加字段,再到索引中添加字段,索引生成之后需要手动添加字段,不会自动生成
 

# 查看索引信息---》mapping字典---》映射(类型,表类型,表结构) GET user_instagram/_mapping # 6.x以后一个索引只能有一个映射类型(只能有一个表) # 创建映射 # 创建索引,并设置映射 PUT _template/user_instagram {     "order" : 1,     "index_patterns" : [       "user_instagram-v1_0"     ],     "settings" : {       "index" : {         "default_pipeline" : "auto_timestamp_pipeline",         "mapping" : {           "total_fields" : {             "limit" : "10000"           }         },         "refresh_interval" : "600s",         "number_of_shards" : "8",         "number_of_replicas" : "0",         "max_inner_result_window" : "50000"       }     },     "mappings" : {       "_meta" : {         "software_version_mapping" : "1.0"       },       "dynamic" : "strict",       "properties" : {         "is_private" : {           "type" : "boolean"         },         "full_name" : {           "type" : "text"         },         "create_time" : {           "type" : "date"         },         "avatar_url" : {           "type" : "text"         },         "user_id" : {           "eager_global_ordinals" : true,           "type" : "keyword"         },         "follower_num" : {           "type" : "integer"         },         "following_num" : {           "type" : "integer"         },         "post_count" : {           "type" : "integer"         },         "nickname" : {           "type" : "text",           "fields" : {             "keyword" : {               "ignore_above" : 256,               "type" : "keyword"             }           },           "doc_values" : false         },         "requested_by_viewer" : {           "type" : "boolean"         },         "is_verified" : {           "type" : "boolean"         },         "followed_by_viewer" : {           "type" : "boolean"         }       }     },     "aliases" : {       "user_instagram" : { }     }   } # 插入测试数据 PUT books/_doc/1 {   "title":"大头儿子小偷爸爸",   "price":100,     "addr":"北京天安门",   "company":{     "name":"我爱北京天安门",     "company_addr":"我的家在东北松花江傻姑娘",     "employee_count":10   },   "publish_date":"2019-08-19" } PUT books/_doc/2 {   "title":"白雪公主和十个小矮人",   "price":"99",   "addr":"黑暗森里",   "company":{     "name":"我的家乡在上海",     "company_addr":"朋友一生一起走",     "employee_count":10   },   "publish_date":"2018-05-19" } PUT books/_doc/3 {   "title":"白雪公主和十个小矮人",   "price":"99",   "addr":"黑暗森里",   "age":18 } # 查看映射 GET books GET books/_mapping

映射是什么?映射有什么用?  规定了表结构(不是强制的),规定了哪个字段是可以用来全文检索,是否是数字类型,布尔类型

mapping类型一旦确定,以后就不能修改了,但是可以插入字段

9 ik分词

# 全文检索,有了映射,决定了我可以对某个字段做全文检索 # es默认分词对英文友好,使用中文分词器(es的插件),ik(作者,中国人,elasticsearch开源社区负责人) # 是es的一个插件(es如何安装插件) #第一种:命令行(内置插件)   	bin/elasticsearch-plugin install analysis-smartcn  安装中文分词器 #第二种:url安装(第三方插件)   	bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip #第三种:手动安装(推荐用)   #下载,解压到es的plugins路径下,重启es即可   #注意:ik分词器跟es版本一定要对应 # 两种分词方式   # ik_smart:分词分的   # ik_max_word :分词分的多   # ik_smart分的词少,粒度大   GET _analyze   {     "analyzer": "ik_smart",     "text": "上海自来水来自海上"   }   # ik_smart分的词多,粒度小   GET _analyze   {     "analyzer": "ik_max_word",     "text": "上海自来水来自海上"   } # 在创建映射的时候配置 # 以后你的操作: #文章标题:ik_max_word #文章内容:ik_smart #摘要 #作者 #创建时间

10 term和match的区别

# match:我们今天出去玩 ----》分词---》按分词去搜 #term:我们今天出去玩---》直接拿着[我们今天出去玩]---&gt;去索引中查询 # 查不到内容,直接拿着  Python爬虫 去查,因为没有索引,所以查不到 GET books/_search {   "query":{     "term":{       "title":"Python爬虫"     }   } } # 能查到,而且带python的都查出来了 # Python   爬虫  分了词,分别拿着这两个词去查,带python关键字,带爬虫关键字都能查到 GET books/_search {   "query":{     "match":{       "title":"Python爬虫"     }   } }

以上就是关于“Elasticsearch聚合查询及排序的方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI