操作ElasticSearch的命令都是通过RestFul风格的请求命令去完成的,大致如下图:
image.png

使用Kibana演示基础操作

创建一个索引

  1. PUT /索引名/类型名/文档id
  2. {
  3. 请求体
  4. }

七、ElasticSearch基本操作 - 图2
在head页面上查看数据:

七、ElasticSearch基本操作 - 图3
由以上示例可知,我们通过put命令创建了一个索引并添加了文档数据,但是我们并没有给这个索引映射类型,在ElasticSearch中数据有多少的数据类型呢?
ElasticSearch相关的数据类型:

  • 字符串类型:text、keyword
  • 数值类型:long、integer、short、byte、doule、float、half float、scaled float
  • 日期类型:date
  • 布尔值类型:boolean
  • 二进制类型:binary
  • 等等…

    创建一个索引不赋值并指定类型

    七、ElasticSearch基本操作 - 图4
    以上json命令只创建了一个test2索引并映射类型

    查看索引信息

    获得这个规则,可以通过get请求获取具体信息。

七、ElasticSearch基本操作 - 图5
通过GET命令就可以查看到索引的信息,后面的目标准确到索引就查看索引信息,准确到文档就查看文档信息。

拓展:通过命令es索引情况,get _cat/可以获得es当前的很多信息。
image.png

修改文档信息

修改文档信息有两种方式,第一种是通过PUT命令在原来的文档上添加数据进行覆盖,第二种是通过POST进行修改。
(1)PUT覆盖修改(曾经)

七、ElasticSearch基本操作 - 图7
使用PUT进行修改有一个弊端,就是他会将所有的数据都进行覆盖,如果你修改的字段有缺漏,则缺漏的部分会被覆盖为空,造成数据的丢失。
(2)POST方式修改,后面要加_update

七、ElasticSearch基本操作 - 图8

删除索引

删除索引信息通过DELETE命令来完成。

七、ElasticSearch基本操作 - 图9
DELETE操作和GET操作一样,后面的目标精确到文档就删除文档信息,精确到索引就删除索引信息。

复杂查询操作

条件查询

语法:

  1. GET 索引名/类型名/_search?q=字段名:字段值

七、ElasticSearch基本操作 - 图10
关于基础条件查询语句的解析:
其中_search后面的q的意思是query,在语法中是一个对象,完整的写法应该如下:

七、ElasticSearch基本操作 - 图11
如上图所示,我们可以在query对象中设置很多的参数来完成各种情况下的查询方式。查询的结果中包含一个hits对象,这个对象的参数就包含了所有具体的查询结果。

条件查询_只显示某几个字段

默认情况下的条件查询会将文档的所有字段都查询出来,但是我们可以通过一个_source属性去指定想要查询出来的字段:

七、ElasticSearch基本操作 - 图12
由上图可以看到,当我们指定了只查询”name”字段的时候,后面查询出来的信息中就只包含了”name”字段信息。

根据指定字段排序查询

七、ElasticSearch基本操作 - 图13
如上图所示,按照age字段进行降序排列,因为我们自定义了按照某种规则进行排序吗,所以之前的排序规则分数就会为Null。

分页查询

七、ElasticSearch基本操作 - 图14
我们可以通过设置”from”和”size”参数来设置分页查询的相关信息。

布尔值查询

通过布尔值查询的方式我们可以实现类似于数据库的多条件查询:

七、ElasticSearch基本操作 - 图15
例如通过这个must指令就可以实现多条件查询,在上图中,只有同时满足name中包含张三,并且年龄为18的数据才会被查询出。
简单的来说满足这两个条件就会返回true的布尔值然后被查询出来,所以被叫做布尔值查询,相当于sql语句中的where and条件语句。

七、ElasticSearch基本操作 - 图16
而should命令则表示后方的两个条件只需要满足其中之一即可,就类似于sql语句中的where or条件语句。

七、ElasticSearch基本操作 - 图17
同理,must_not表示查询出不满足条件的数据,例如上图查询出年龄不为18的信息,相当于sql中的not条件语句。

过滤查询操作

在满足多种条件查询的同时,es也支持我们对查询的数据进行进一步的筛选过滤。七、ElasticSearch基本操作 - 图18

七、ElasticSearch基本操作 - 图19
通过上图的配置可以实现按照年龄大小进行进一步过滤的操作,

  • gte是大于等于操作
  • lte是小于等于操作
  • gt只表示大于操作
  • lt只表示小于操作。

同时,也可以同时设置大于和小于来进行值的区间搜索操作,相当于sql中的between and条件。

七、ElasticSearch基本操作 - 图20

匹配多个条件查询

匹配多个条件查询就有点类似于sql中的in关键字。

七、ElasticSearch基本操作 - 图21
如图所示,tags是兴趣标签,在数据中是以数组的形式存在的,也就是说有多个值,通过这种方式就可以进行多个值的随意匹配。

精确匹配term

term精确匹配和match的不同:

  • term会将条件依据倒排索引进行精确匹配
  • match则会将查询条件进行分词然后再匹配。

简单的来说,match会产生类似与模糊查询的效果,而term不会,条件匹配不上即使数据包含查询条件也不会被查询出来。

两个类型text和keyword:

  • text会被分词器进行分词
  • keyword不会被分词器分词。

image.png

image.png
image.png
image.png

高亮查询

ElasticSearch同时也支持高亮查询,他会将查询结果中的查询条件关键字进行自动的高亮显示。
image.png

七、ElasticSearch基本操作 - 图27

这些mysql也可以做,只是效率比较低

  • 匹配
  • 按照条件匹配
  • 精确匹配
  • 区间范围匹配
  • 匹配字段过滤
  • 多条件查询
  • 高亮查询