Elasticsearch聚合查询及排序的方法
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇"Elasticsearch聚合查询及排序的方法"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一
千家信息网最后更新 2025年01月20日Elasticsearch聚合查询及排序的方法
这篇"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,filtermust --- and should --- ormust_not --- notfilter --- 过滤# 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": "", "post_tags": "", "fields": { "from": {} } }}
小结:
混合开发,你知道怎么处理
前后端分离,你怎么处理?
串直接以josn格式返回,前端自行渲染
用的最多就是match+布尔+高亮+分页
7 聚合查询avg、max、min、sum、分组
# 聚合查询# 1 聚合查询之avgselect 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 聚合之minGET gyy/doc/_search{ "query": { "match": { "from": "gu" } }, "aggs": { "my_min": { "min": { "field": "age" } } }, "size": 0}# 4 聚合查询之sumGET 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 booksGET 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:我们今天出去玩---》直接拿着[我们今天出去玩]--->去索引中查询# 查不到内容,直接拿着 Python爬虫 去查,因为没有索引,所以查不到GET books/_search{ "query":{ "term":{ "title":"Python爬虫" } }}# 能查到,而且带python的都查出来了# Python 爬虫 分了词,分别拿着这两个词去查,带python关键字,带爬虫关键字都能查到GET books/_search{ "query":{ "match":{ "title":"Python爬虫" } }}
以上就是关于"Elasticsearch聚合查询及排序的方法"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
查询
字段
索引
数据
类型
排序
内容
模版
信息
插件
爬虫
结果
文章
条件
高亮
组合
方法
全文
全文检索
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手机万能服务器 电梯
计算机网络技术发展前景
用命令给数据库创建主键
广安金财网络安全培训
万方数据库检索特点
天涯明月刀各区服务器位置
服务器集成系统管理处理器
50etf分仓软件开发
浙江服务器机柜哪里买
为向互联网科技公司怎么样
数据库中1146
软件开发过程中甲方威胁
shell 连接数据库日志
西安商友网络技术有限公司
数据库表修改字符串的某个字符
党建引领网络安全管理
cf山东网通服务器在哪里
互联网科技微信公众号
数据库应用第四章ppt
乐视软件开发工资一般多少
教育系统网络安全通知
全球网络安全供应商排名
表情包服务器后台管理采集
有关 的数据库
手机软件开发开发
鑫享通服务器异常
如何把软件安装在云服务器
c 从数据库读取图片失败
单机手游需不需要服务器
开启远程服务器管理工具