es怎么返回全部查询结果_ES基本查询语句教程
前言
es是什么?
es是基于Apache Lucene的开源分布式(全文)搜索引擎,,提供简单的RESTful API来隐藏Lucene的复杂性。
es除了全文搜索引擎之外,还可以这样描述它:
1、分布式的实时文件存储,每个字段都被索引并可被搜索
2、分布式的实时分析搜索引擎
3、可以扩展到成百上千台服务器,处理PB级结构化或非结构化数据。
ES的数据组织类比
Relational DBElasticsearch
数据库(database)
索引(indices)
表(tables)
types
行(rows)
documents
字段(columns)
fields
mac安装ES
一、 ES简单的增删改查
1、创建一篇文档(有则修改,无则创建)
2、查询指定索引信息
3、 查询指定文档信息
4、查询对应索引下所有数据
5、删除指定文档
6、删除索引
7、修改指定文档方式
修改时,不指定的属性会自动覆盖,只保留指定的属性(不正确的修改指定文档方式)
使用POST命令,在id后面跟_update,要修改的内容放到doc文档(属性)中(正确的修改指定文档方式)
二、ES查询的两种方式
1、查询字符串搜索
2、结构化查询(单字段查询,不能多字段组合查询)
三、match系列之操作
1、match系列之match_all (查询全部)
2、match系列之match_phrase(短语查询)
通过观察结果可以发现,虽然如期的返回了中国的文档。但是却把和美国的文档也返回了,这并不是我们想要的。是怎么回事呢?因为这是elasticsearch在内部对文档做分词的时候,对于中文来说,就是一个字一个字分的,所以,我们搜中国,中和国都符合条件,返回,而美国的国也符合。而我们认为中国是个短语,是一个有具体含义的词。所以elasticsearch在处理中文分词方面比较弱势。后面会讲针对中文的插件。但目前我们还有办法解决,那就是使用短语查询 用match_phrase
我们搜索中国和世界这两个指定词组时,但又不清楚两个词组之间有多少别的词间隔。那么在搜的时候就要留有一些余地。这时就要用到了slop了。相当于正则中的中国.*?世界。这个间隔默认为0
3、match系列之match_phrase_prefix(最左前缀查询)智能搜索--以什么开头
搜索特定英文开头的数据
max_expansions 参数理解 前缀查询会非常的影响性能,要对结果集进行限制,就加上这个参数。
4、match系列之multi_match(多字段查询)
multi_match是要在多个字段中查询同一个关键字 除此之外,mulit_match甚至可以当做match_phrase和match_phrase_prefix使用,只需要指定type类型即可
当设置属性 type:phrase 时 等同于 短语查询
当设置属性 type:phrase_prefix时 等同于 最左前缀查询
match 查询相关总结
1、match:返回所有匹配的分词。
2、match_all:查询全部。
3、match_phrase:短语查询,在match的基础上进一步查询词组,可以指定slop分词间隔。
4、match_phrase_prefix:前缀查询,根据短语中最后一个词组做前缀匹配,可以应用于搜索提示,但注意和max_expanions搭配。其实默认是50.......
5、multi_match:多字段查询,使用相当的灵活,可以完成match_phrase和match_phrase_prefix的工作。
四、ES的排序查询
es 6.8.4版本中,需要分词的字段不可以直接排序,比如:text类型,如果想要对这类字段进行排序,需要特别设置:对字段索引两次,一次索引分词(用于搜索)一次索引不分词(用于排序),es默认生成的text类型字段就是通过这样的方法实现可排序的。
升序排序
五、ES的分页查询
from:从哪开始查 size:返回几条结果
六、ES的bool查询 (must、should)
must (must字段对应的是个列表,也就是说可以有多个并列的查询条件,一个文档满足各个子条件后才最终返回)
should (只要符合其中一个条件就返回)
must_not 顾名思义
filter(条件过滤查询,过滤条件的范围用range表示gt表示大于、lt表示小于、gte表示大于等于、lte表示小于等于)
bool查询总结
must:与关系,相当于关系型数据库中的 and。
should:或关系,相当于关系型数据库中的 or。
must_not:非关系,相当于关系型数据库中的 not。
filter:过滤条件。
range:条件筛选范围。
gt:大于,相当于关系型数据库中的 >。
gte:大于等于,相当于关系型数据库中的 >=。
lt:小于,相当于关系型数据库中的
lte:小于等于,相当于关系型数据库中的 <=。
七、ES之查询结果过滤
现在,在所有的结果中,我只需要查看name和age两个属性,提高查询效率
八、ES之查询结果高亮显示
ES的默认高亮显示
ES自定义高亮显示(在highlight中,pre_tags用来实现我们的自定义标签的前半部分,在这里,我们也可以为自定义的 标签添加属性和样式。post_tags实现标签的后半部分,组成一个完整的标签。至于标签中的内容,则还是交给fields来完成)
十、ES之精确查询与模糊查询
term查询查找包含文档精确的倒排索引指定的词条。也就是精确查找。
term和match的区别是:match是经过analyer的,也就是说,文档首先被分析器给处理了。根据不同的分析器,分析的结果也稍显不同,然后再根据分词结果进行匹配。term则不经过分词,它是直接去倒排索引中查找了精确的值了。
对比两者的不同 (结果就不展示出来了,只展示结果的文字叙述)
查找多个精确值(terms)
十一、ES的聚合查询avg、max、min、sum
需求1、查询from是gu的人的平均年龄。
上例中,首先匹配查询from是gu的数据。在此基础上做查询平均值的操作,这里就用到了聚合函数,其语法被封装在aggs中,而my_avg则是为查询结果起个别名,封装了计算出的平均值。那么,要以什么属性作为条件呢?是age年龄,查年龄的什么呢?是avg,查平均年龄。
如果只想看输出的值,而不关心输出的文档的话可以通过size=0来控制
需求2、查询年龄的最大值
需求3、查询年龄的最小值
需求4、查询符合条件的年龄之和
十二、ES的分组查询
需求: 要查询所有人的年龄段,并且按照1520,2025,25~30分组,并且算出每组的平均年龄。
上例中,在aggs的自定义别名age_group中,使用range来做分组,field是以age为分组,分组使用ranges来做,from和to是范围
接下来,我们就要对每个小组内的数据做平均年龄处理。
ES的聚合查询的总结:聚合函数的使用,一定是先查出结果,然后对结果使用聚合函数做处理
avg:求平均
max:最大值
min:最小值
sum:求和
十三、ES之Mappings
由返回结果可以看到,分为两大部分:
1. mappings 是什么?
2. 字段的数据类型
一个简单的映射示例
我们在创建索引PUT mapping_test1的过程中,为该索引定制化类型(设计表结构),添加一个映射类型test1;指定字段或者属性都在properties内完成。
返回的结果中你肯定很熟悉!映射类型是test1,具体的属性都被封装在properties中。
3. ES mappings之dynamic的三种状态
一般的,mapping则又可以分为动态映射(dynamic mapping)和静态(显示)映射(explicit mapping)和精确(严格)映射(strict mappings),具体由dynamic属性控制。默认为动态映射
测试静态映射:当elasticsearch察觉到有新增字段时,因为dynamic:false的关系,会忽略该字段,但是仍会存储该字段。
测试严格映射:当elasticsearch察觉到有新增字段时,因为dynamic:strict 的关系,就会报错,不能插入成功。
小结: 动态映射(dynamic:true):动态添加新的字段(或缺省)。 静态映射(dynamic:false):忽略新的字段。在原有的映射基础上,当有新的字段时,不会主动的添加新的映射关系,只作为查询结果出现在查询中。 严格模式(dynamic:strict):如果遇到新的字段,就抛出异常。一般静态映射用的较多。就像HTML的img标签一样,src为自带的属性,你可以在需要的时候添加id或者class属性。当然,如果你非常非常了解你的数据,并且未来很长一段时间不会改变,strict不失为一个好选择。
4. ES之mappings的 index 属性
index属性默认为true,如果该属性设置为false,那么,elasticsearch不会为该属性创建索引,也就是说无法当做主查询条件。
es怎么返回全部查询结果_ES基本查询语句教程相关推荐
- es 仅返回单个字段 查询_ES性能优化实战,几十亿数据查询 3 秒返回!
来源:cnblogs.com/mikevictor07/p/10006553.html 在此篇幅中偏重于 ES 的优化,关于 HBase,Hadoop 的设计优化有很多文章可以参考,不再赘述. 需求说 ...
- es 查询语法_ES 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
点击上方☝SpringForAll社区 轻松关注! 及时获取有趣有料的技术文章 本文来源:http://8rr.co/GFLb 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 e ...
- es java api 查询_es聚合查询javaapi
查询节气详情 package net.apishop.www.controller; import import import import import import import import i ...
- es 去重统计_es 去重查询(聚合、分组、分页、求和统计等)
elasticsearch(es) 如何针对指定字段进行去重相关查询,完成如聚合.分组.分页.类似求和统计等操作? 获取所有的不同值 es 获取指定字段所有可能的值,可以使用桶聚合的 terms 聚合 ...
- Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合
Elasticsearch(三)--Es搜索(简单使用.全文查询.复合查询).地理位置查询.特殊查询.聚合操作.桶聚合.管道聚合 一.Es搜索 这里的 Es 数据博主自己上网找的,为了练习 Es 搜索 ...
- ES基本查询语句教程
前言 es是什么? es是基于Apache Lucene的开源分布式(全文)搜索引擎,,提供简单的RESTful API来隐藏Lucene的复杂性. es除了全文搜索引擎之外,还可以这样描述它: 1. ...
- ES系列之利用filter让你的查询效率飞起来
bool查询简介 Elasticsearch(下面简称ES)中的bool查询在业务中使用也是比较多的.在一些非实时的分页查询,导出的场景,我们经常使用bool查询组合各种查询条件. Bool查询包括四 ...
- oracle当查询没有输出返回0,[数据库] Oracle单表查询总数及百分比和数据横向纵向连接...
这是最近项目关于SQL语句的,本文简单记录并总结以下几个知识点: 1.如何统计一张表中某个字段的总数,如不同"专业"的学生数及所占百分比: 2.如何联系另一张表进行查询某个字段的总 ...
- ES中如何实现in和not in查询
问题描述: 在ES中如何实现in和not in查询? 实现方案: ES中可以通过terms进行多值匹配查询,实现in和not in查询逻辑. 比如: "query": {" ...
最新文章
- Oracle HowTo:如何使用Oracle case函数
- c语言gcno文件位置,makefile - 具有覆盖率的CMake Ninja将gcno文件放在根二进制目录中 - 堆栈内存溢出...
- 十个简单好用的设计技巧[SM]
- Windows Phone开发(32):路径之PathGeometry 转:http://blog.csdn.net/tcjiaan/article/details/7469512...
- acwing3132. 食物(BZOJ3028)
- 无盘服务器 机械盘,Win7启动速度研究,同样的PC配置,机械盘、固态盘、无盘网络启动速度为何不同?...
- 混过了2015,依然不知道你要什么?
- 【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类...
- A - 敌兵布阵(线段树)(单点更新区间求和)
- vue 用百度地图实现链家找房的效果
- 报错java.lang.NoClassDefFoundError: org/jaxen/JaxenException
- 2022年最新版黑马程序员Java学习路线
- Java-视频按秒截取帧
- SREng 使用指南(一)SREng简介
- python读取文件名包含某字符的文件_Python 在当前和子目录中查找文件名中包含指定字符串的文件...
- 做不到这些?再干十年你也只能是个普通码农!
- python房价分析论文_用Python研究了三千套房子,告诉你究竟是什么抬高了房价?...
- vue + element-ui 对登录功能、重置表单、退出功能、路由重定向、挂载路由导航守卫的实现
- iOS 加密算法之MD5加密使用
- Sublime的使用小技巧