|微服务160Elasticsearch高级使用
今天是刘小爱自学Java的第160天 。
感谢你的观看 , 谢谢你 。
本文插图
学习计划安排 , 关于搜索功能:
搜索结果过滤的补充说明 。
布尔组合查询、范围查询…等多种高级查询 。
以及非常重要的聚合查询 , 其两种常用类型:桶和度量的说明与使用 。
昨天学了match匹配和term匹配 , 这是两种最基础也很重要的查询方式 , 使用起来也简单 。
一、结果过滤
补充一个知识点 , 关于结果过滤 。
本文插图
先将例子中索引库的数据做一个简单的说明 , 昨天的学习中也有详细介绍 。
索引库liuxiaoai01中有title和price两个字段 , 添加了“小爱手机”、“大爱手机”、“超爱手机”和“小爱电视”一共4条数据 。
如果不将结果过滤 , 在结果中会将title和price对应的数据都显示出来 。
而通过''_source''就能指定字段 , 上图中指定了title字段 , 所以价格数据就被过滤掉了 。
除了上述用法 , 还有两种用法:
本文插图
includes的使用
includes翻译过来就是包含的意思 。
根据其语义理解其作用 , 也就是说如果索引库中有多个字段 , 可以通过includes来指定想要显示的字段 。
excludes的使用
excludes翻译过来就是排除的意思 。
也就是可以通过excludes指定不想要显示的字段 , 很好理解
二、高阶查询
1布尔组合查询
本文插图
关键字是bool , 它本身并不是一种查询方式 , 而是将查询方式通过逻辑运算组合起来了 。
must
翻译过来就是必须的意思 , 可以填写多个查询条件(中括号本身表示的也就是数组)
多个查询条件通过must连接 , 相当于以前常用的and , 说白了也就是逻辑运算符“与” 。
must_not
刚好就和上述must相反 , 说白了也就是逻辑运算符“与” 。
should
通用的道理:多个查询条件通过should连接 , 相当于以前常用的or , 说白了也就是逻辑运算符“与” 。
ps:关于其格式使用 , 不要看它图中好像挺复杂的样子 , 其实都可以通过工具有提示 , 并且这些写多了基本也就知道了 。
2范围查询
本文插图
商品都有自己的价格 , 用户可以通过设定价格区间搜索到对应的商品 。
range就可以实现范围查询 , 其中通过四种字符说明查询的区间 。
gt:表示大于
get:表示大于等于
lt:表示小于
lte:表示小于等于
3模糊查询
实际应用中用户搜索时输入的词条与实际词条存在偏差 , 但也能搜索到对应的数据 , 这就需要使用到模糊查询了 。
本文插图
关键字是fuzzy , 翻译过来也就是模糊的 。
上述例子中 , 我添加了一个apple数据 , 查询的时候通过appla就可以模糊查询到 , 但是偏差的编辑距离不能超过2 , 其中也可以通过fuzziness来指定允许的编辑距离 。
此外还有过滤 , 排序这些操作 , 并且上述这些操作一般都是组合起来使用的 , 其实无外乎就是记住关键字:
关于过滤对应的也就是filter 。
关于排序也就对应着sort 。
三、聚合aggregations
Elasticsearch中的聚合包含多种类型 , 最常用的有两种:
桶(bucket)
其实蛮好理解的 , 比如上海现在一直在执行的垃圾分类 , 就有多个桶:干垃圾桶、湿垃圾桶、有害垃圾桶以及可回收物桶 。
所以桶的作用就在于按照某种方式对数据进行分组 , 它只负责分组 , 不进行运算 。
度量(metrics)
也就是我们以前学的聚合函数 , 比如求平均值、最大值、最小值以及求和…等这些运算 。
2聚合的使用
本文插图
在使用之前 , 我们需要创建一个索引库并添加数据 , 作为聚合的测试数据 。
cars索引库 , 有color和make两个字段 , 字段类型都为keyword , 也就是不分词 。
也就是关于汽车的一个索引库 , 有颜色和生产商这两个字段 。
根据我们这两天的学习情况就可以简单地实现 , 具体添加了哪些数据就不做说明了 。
桶的使用
本文插图
size表示是查询条数 , 我这里设置为1 , 主要在于一个了解 , 重点在于聚合结果 。
aggs也就是聚合aggregations的简写 , 说明这是一个聚合查询:
popular_make:聚合名 , 这是自定义的一个名称 , 尽量见名知义即可 。
terms:划分桶的方式 , 有多种方式 , 这里是根据词条划分 。
field:划分桶的字段 , 这里根据make划分 。
这样聚合之后 , 索引库中的数据就根据field这个字段划分成了4个桶:例子中也就是''honda''、''ford''、''toyota''、''bmw'' 。
elasticsearch中关于桶的划分方式有多种:
Date Histogram:根据日期分组 。
Historgram:根据数值分组 。
Terms:根据词条内容分组 , 也就是上述使用的 。
Range:数值和日期的范围分组 。
……等等多种方式 。
度量的使用
本文插图
认真观察和会发现它们的格式就是一样的 , 格式无外乎就是4步骤:
aggs说明是聚合查询 。
给这个聚合自定义一个名称 。
说明聚合类型:中terms是桶的类型 , 中avg是度量的类型 。
field说明聚合字段:中根据make划分成多个桶 , 中求桶中price字段的平均值 。
上述例子也能看出聚合之间能嵌套使用 。
elasticsearch中度量的划分方式也有多种:
Avg求平均值;Max求最大值;Min求最小值;Sum求和……等等多种度量聚合方式
当然关于聚合的使用 , spring集成了一个子模块Spring Data Elasticsearch , 在Java中使用起来更简单 , 具体后续说明 。
最后
【|微服务160Elasticsearch高级使用】行有不得反求诸己 , 我是@刘小爱
推荐阅读
- 显微镜|假如人类可以把显微镜提升到40亿倍,是不是全新的宇宙观?
- 各地地方风味特色菜!
- 猜成语|看图猜成语:稍微转一转,生命更精彩!
- 布法罗大学|新工具可以通过眼睛里的微小反射来识别出深度伪造照片
- 微创手术|女大学生双手“挥汗如雨” 微创手术20分钟搞定顽疾
- 大叔用xo酱炖的辣豆腐,嫩滑可口,咸鲜微辣,家人爱吃!
- 鲫鱼我只服这样做,稍微腌制风干,做好一次可以吃上半年
- 使用微波炉蒸蔬菜,要想好吃营养不流失,不同的蔬菜方法不同
- 微笑豆沙巧克力面包
- 螺旋测微器|敲黑板!千分尺就怕这样用……
