前言

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基本查询语句教程相关推荐

  1. es 仅返回单个字段 查询_ES性能优化实战,几十亿数据查询 3 秒返回!

    来源:cnblogs.com/mikevictor07/p/10006553.html 在此篇幅中偏重于 ES 的优化,关于 HBase,Hadoop 的设计优化有很多文章可以参考,不再赘述. 需求说 ...

  2. es 查询语法_ES 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

    点击上方☝SpringForAll社区 轻松关注! 及时获取有趣有料的技术文章 本文来源:http://8rr.co/GFLb 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 e ...

  3. es java api 查询_es聚合查询javaapi

    查询节气详情 package net.apishop.www.controller; import import import import import import import import i ...

  4. es 去重统计_es 去重查询(聚合、分组、分页、求和统计等)

    elasticsearch(es) 如何针对指定字段进行去重相关查询,完成如聚合.分组.分页.类似求和统计等操作? 获取所有的不同值 es 获取指定字段所有可能的值,可以使用桶聚合的 terms 聚合 ...

  5. Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合

    Elasticsearch(三)--Es搜索(简单使用.全文查询.复合查询).地理位置查询.特殊查询.聚合操作.桶聚合.管道聚合 一.Es搜索 这里的 Es 数据博主自己上网找的,为了练习 Es 搜索 ...

  6. ES基本查询语句教程

    前言 es是什么? es是基于Apache Lucene的开源分布式(全文)搜索引擎,,提供简单的RESTful API来隐藏Lucene的复杂性. es除了全文搜索引擎之外,还可以这样描述它: 1. ...

  7. ES系列之利用filter让你的查询效率飞起来

    bool查询简介 Elasticsearch(下面简称ES)中的bool查询在业务中使用也是比较多的.在一些非实时的分页查询,导出的场景,我们经常使用bool查询组合各种查询条件. Bool查询包括四 ...

  8. oracle当查询没有输出返回0,[数据库] Oracle单表查询总数及百分比和数据横向纵向连接...

    这是最近项目关于SQL语句的,本文简单记录并总结以下几个知识点: 1.如何统计一张表中某个字段的总数,如不同"专业"的学生数及所占百分比: 2.如何联系另一张表进行查询某个字段的总 ...

  9. ES中如何实现in和not in查询

    问题描述: 在ES中如何实现in和not in查询? 实现方案: ES中可以通过terms进行多值匹配查询,实现in和not in查询逻辑. 比如: "query": {" ...

最新文章

  1. Oracle HowTo:如何使用Oracle case函数
  2. c语言gcno文件位置,makefile - 具有覆盖率的CMake Ninja将gcno文件放在根二进制目录中 - 堆栈内存溢出...
  3. 十个简单好用的设计技巧[SM]
  4. Windows Phone开发(32):路径之PathGeometry 转:http://blog.csdn.net/tcjiaan/article/details/7469512...
  5. acwing3132. 食物(BZOJ3028)
  6. 无盘服务器 机械盘,Win7启动速度研究,同样的PC配置,机械盘、固态盘、无盘网络启动速度为何不同?...
  7. 混过了2015,依然不知道你要什么?
  8. 【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类...
  9. A - 敌兵布阵(线段树)(单点更新区间求和)
  10. vue 用百度地图实现链家找房的效果
  11. 报错java.lang.NoClassDefFoundError: org/jaxen/JaxenException
  12. 2022年最新版黑马程序员Java学习路线
  13. Java-视频按秒截取帧
  14. SREng 使用指南(一)SREng简介
  15. python读取文件名包含某字符的文件_Python 在当前和子目录中查找文件名中包含指定字符串的文件...
  16. 做不到这些?再干十年你也只能是个普通码农!
  17. python房价分析论文_用Python研究了三千套房子,告诉你究竟是什么抬高了房价?...
  18. vue + element-ui 对登录功能、重置表单、退出功能、路由重定向、挂载路由导航守卫的实现
  19. iOS 加密算法之MD5加密使用
  20. Sublime的使用小技巧

热门文章

  1. 用Helloworld来阐释SpringBoot的简单与快速
  2. 对于实现顺序表过程中所遇到的传递指针和传递指针引用的有关思考
  3. 国仁猫哥:快手小店开通流程和商品上架具体操作步骤。【值得收藏】
  4. CSS透明度–详细概述
  5. 判断整数的正负零特性
  6. uniapp 扫描枪获取条码不全解决办法,vue组件,使用双向绑定,回车事件触发,获取文本不全问题
  7. 曾宪华访谈:公司与个人参与iOS开源的心得
  8. 争辩地不要,悄悄地引导
  9. java 热量图实现_安卓实现计步器,能够计算卡路里的消耗
  10. Excel更改超级链接图片打开方式