文章目录

  • 前言:
    • 1:索引操作
      • 1:创建索引
      • 2:查看所有索引
      • 3:查看单个索引
      • 4:删除索引
    • 2:映射操作
      • 1:创建映射
      • 2:查看映射
      • 3:索引关系映射
      • 4:为索引新增字段及对应索引
      • 5:索引字段类型为text,添加keyword类型操作
      • 6:修改字段映射类型
      • 7:新增日期字段映射
    • 3:文档操作
      • 1:创建文档
      • 2:查看文档
      • 3:修改文档-全覆盖
      • 4:修改文档-修改单个字段
      • 5:删除文档
      • 6:根据条件删除文档
    • 4:高级查询
      • 1:查询所有文档-search
      • 2:匹配查询-match
      • 3:多字段匹配查询-multi_match
      • 4:关键字精确查询-term
      • 5:多关键字精确查找-terms
      • 6:指定字段查询-(_source)
      • 7:过滤字段-(includes)
      • 8:组合查询-bool
      • 9:范围查询-range
      • 10:模糊查询-fuzzy
      • 11:单字段排序-sort
      • 12:多字段排序-sort
      • 13:分页查询-from$size
      • 14:聚合查询-count,max,min,avg,sum
      • 15:桶聚合查询(group by分组)- terms

系列文章:
Elasticsearch-05-Elasticsearch-sql组件史上最全详解
Elasticsearch-04-Elasticsearch组件head和kibana详解
Elasticsearch-03-JavaApi以及springboot中操作-RestHighLevelClient
Elasticsearch-01-es概念及安装

前言:

在此大家的前置知识是了解restful风格的接口以及会使用postman工具
Restful接口详解

1:索引操作

1:创建索引

在 Postman 中, 向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/索引名

{
“acknowledged” 【响应结果】 : true, # true 操作成功
“shards_acknowledged” 【分片结果】 : true, # 分片操作成功
“index” 【索引名称】 : “myindex”
}
注意:创建索引库的分片数默认 1 片,在 7.0.0 之前的 Elasticsearch 版本中,默认 5 片

如果重复添加索引, 会返回错误信息

2:查看所有索引

在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/_cat/indices?v

这里请求路径中的_cat 表示查看的意思, indices 表示索引,所以整体含义就是查看当前 ES
服务器中的所有索引,就好像 MySQL 中的 show tables 的感觉,服务器响应结果如下

3:查看单个索引

在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/myindex

{"shopping"【索引名】: {"aliases"【别名】: {},"mappings"【映射】: {},"settings"【设置】: {"index"【设置-索引】: {"creation_date"【设置-索引-创建时间】: "1614265373911","number_of_shards"【设置-索引-主分片数量】: "1","number_of_replicas"【设置-索引-副分片数量】: "1","uuid"【设置-索引-唯一标识】: "eI5wemRERTumxGCc1bAk2A","version"【设置-索引-版本】: {"created": "7080099"},"provided_name"【设置-索引-名称】: "shopping"}}}
}

4:删除索引

在 Postman 中, 向 ES 服务器发 DELETE 请求 :http://127.0.0.1:9200/shopping

2:映射操作

有了索引库,相当于数据库中的database;
接下来就需要建索引库(index)中的映射了, 类似于数据库(database)中的表结构(table)。
创建数据库表需要设置字段名称,类型, 长度, 约束等; 索引库也一样,需要知道这个类型 下
有哪些字段, 每个字段有哪些约束信息,这就叫做映射(mapping)。

1:创建映射

在 Postman 中, 向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/索引名/_mapping
注:前提是先创建索引,才可以创建映射

{"properties": {"test_keyword_File": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"text": {"type": "text"},"keywordFile": {"type": "keyword"},"longFile": {"type": "long"},"date": {"type": "date","format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"},"booleanFile": {"type": "boolean"}}
}

映射数据说明:

  • 字段名:任意填写, 下面指定许多属性, 例如:title 、subtitle 、images 、price
  • type:类型, Elasticsearch 中支持的数据类型非常丰富,说几个关键的:
    • String 类型,又分两种:
      * text:可分词
      * keyword:不可分词,数据会作为完整字段进行匹配
    • Numerical:数值类型,分两类
      • 基本数据类型: long 、integer、short 、byte 、double、float 、
      • half_float 浮点数的高精度类型:scaled_float
    • Date: 日期类型
    • Array:数组类型
    • Object:对象
  • index:是否索引,默认为 true ,也就是说你不进行任何配置,所有字段都会被索引。
    • true:字段会被索引,则可以用来进行搜索
    • false:字段不会被索引, 不能用来搜索
  • store:是否将数据进行独立存储,默认为 false原始的文本会存储在_source 里面, 默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段, 只要设置"store":true 即可, 获取独立存储的字段要比从_source 中解析快得多,但是也会占用
    更多的空间,所以要根据实际业务需求来设置。
  • analyzer:分词器, 可以使用ik_max_word 即使用 ik 分词器,后面会有专门的章节学习

2:查看映射

在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_mapping

3:索引关系映射

在 Postman 中, 向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/student1
这种可以直接创建索引以及对映的映射,不需要提前创建index

4:为索引新增字段及对应索引

在 Postman 中, 向 ES 服务器发 PUT 请求 :http://127.0.0.1:9200/student1/_mapping
不可以使用/student1然后mapping的方式,那样会提示索引已存在

5:索引字段类型为text,添加keyword类型操作

  • text类型:会进行分词;分词后建立索引;支持模糊查询;支持准确查询;不支持聚合查询。
  • keyword类型:不会分词;直接建立索引;支持模糊查询;支持准确查询;支持聚合查询。

如果有时候我们我们对于一个text类型的字段即希望他能够分词,又希望他精确索引,那么我们就可以给这个字段设置为text,并加上keyword类型操作,当然,如果我们创建索引时不指定映射,es的自动动态映射也可以设置成这样:

6:修改字段映射类型

首先说明es中索引的字段类型是不可修改的,只能是重新创建一个索引并设置好mapping,然后再将老索引的数据复制过去。
解决思路:
新建临时索引,执行字段类型,复制数据
删除旧索引,重建同名索引,从临时索引复制数据

#获取旧索引的字段映射
GET /users/_mapping#创建临时索引带映射
PUT /users_temp
{"mappings": {"user": {"properties": {"age": {"type": "long"},}}}
}#复制数据
POST /_reindex
{"source": {"index": "users"}, "dest": {"index": "users_temp"}
}#删除旧索引
DELETE /users#创建新索引带映射
PUT /users
{"mappings": {"user": {"properties": {"age": {"type": "long"},}}}
}#复制数据
POST /_reindex
{"source": {"index": "users_temp","query": {"match_all": {}}}, "dest": {"index": "users"}
}#删除临时索引
DELETE /users_temp

7:新增日期字段映射

{"properties":{"dateFormatDate":{"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||yyyy-MM||epoch_millis"       }}
}

3:文档操作

1:创建文档

在 Postman 中, 向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/myindex/_doc

上面的数据创建后, 由于没有指定数据唯一性标识(ID), 默认情况下, ES 服务器会随机
生成一个。
如果想要自定义唯一性标识,需要在创建时指定:http://127.0.0. 1:9200/myindex/_doc/1

2:查看文档

在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/shoppin/_doc/1

3:修改文档-全覆盖

和新增文档一样,输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖
在 Postman 中, 向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/_doc/1

4:修改文档-修改单个字段

向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/_doc/1,请求体发生改变

5:删除文档

删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除) 。
在 Postman 中, 向 ES 服务器发 DELETE 请求 :http://127.0.0.1:9200/shopping/_doc/1

6:根据条件删除文档

一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数据进行删除

向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/_delete_by_query

4:高级查询

1:查询所有文档-search

在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student1/_search

{"query": {"match_all": {}}
}
# "query":这里的 query 代表一个查询对象,里面可以有不同的查询属性
# "match_all":查询类型,例如: match_all(代表查询所有), match,term , range 等等
# {查询条件}:查询条件会根据类型的不同,写法也有差异

结果解析:

2:匹配查询-match

match 匹配类型查询,会把查询条件进行分词, 然后进行查询, 多个词条之间是 or 的关系
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student1/_search

{"query":{"match":{"name":"张三"}}
}

3:多字段匹配查询-multi_match

multi_match 与 match 类似,不同的是它可以在多个字段中查询。
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

4:关键字精确查询-term

term 查询,精确的关键词匹配查询, 不对查询条件进行分词。
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search
前提:这个name2必须是keyword类型的字段

5:多关键字精确查找-terms

terms 查询和 term 查询一样,但它允许你指定多值进行匹配。
如果这个字段包含了指定值中的任何一个值, 那么这个文档满足条件, 类似于 mysql 的 in
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

6:指定字段查询-(_source)

默认情况下,Elasticsearch 在搜索的结果中,会把文档中保存在_source 的所有字段都返回
。 如果我们只想获取其中的部分字段, 我们可以添加_source 的过滤
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

7:过滤字段-(includes)

我们也可以通过:

  • includes:来指定想要显示的字段
  • excludes:来指定不想要显示的字段
    在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

8:组合查询-bool

bool把各种其它查询通过must (必须 )、 must_not (必须不)、 should (应该)
的方 式进行组合
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

9:范围查询-range

range 查询找出那些落在指定区间内的数字或者时间。 range 查询允许以下字符

在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

10:模糊查询-fuzzy

返回包含与搜索字词相似的字词的文档。
编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括:

  • 更改字符(box → fox)
  • 删除字符(black → lack)
  • 插入字符(sic → sick)
  • 转置两个相邻字符(act → cat)

为了找到相似的术语,fuzzy 查询会在指定的编辑距离内创建一组搜索词的所有可能的变
体 或扩展。然后查询返回每个扩展的完全匹配。
通过 fuzziness 修改编辑距离。一般使用默认值 AUTO ,根据术语的长度生成编辑距离。

在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

11:单字段排序-sort

sort 可以让我们按照不同的字段进行排序, 并且通过 order 指定排序的方式。 desc 降序, asc
升序。
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

12:多字段排序-sort

假定我们想要结合使用 age 和 _score 进行查询, 并且匹配的结果首先按照年龄排序,然
后 按照相关性得分排序
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

13:分页查询-from$size

from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size
size:每页显示多少条
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

14:聚合查询-count,max,min,avg,sum

聚合允许使用者对 es 文档进行统计分析, 类似与关系型数据库中的 group by,当然还有很
多其他的聚合, 例如取最大值、平均值等等。
对某个字段取最大值 max
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

对某个字段取最小值 min
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

对某个字段在查出的结果集中取和 sum
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

对某个字段在查出的结果集中取平均值 avg
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

对某个字段的值进行去重之后再取总数
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

State 聚合
stats 聚合, 对某个字段一次性返回 count ,max ,min ,avg 和 sum 五个指标
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

15:桶聚合查询(group by分组)- terms

桶聚和相当于 sql 中的 group by 语句
terms 聚合,分组统计
在 Postman 中, 向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search

在桶聚合分组查询后再进行聚合查询

Elasticsearch-02-es的restapi使用相关推荐

  1. 搜索引擎之ElasticSearch(es)入门学习、ELK 和 beats

    好记星不如烂笔头,这里记录平时工作中用到的东西,不喜可以留言. 一.ElasticSearch为啥要用 ElasticSearch简称es是一个ElasticSearch是一个分布式,高性能.高可用. ...

  2. C# 如何使用 Elasticsearch (ES)

    Elasticsearch简介 Elasticsearch (ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好 ...

  3. java代码怎样连接es,Elasticsearch 连接ES的两种方式

    1.创建客户端节点来连接: 其中client(true)将node指定为客户端节点,所以这个不能写漏掉,客户端节点是不持有数据的, Java代码   Node node = NodeBuilder.n ...

  4. ElasticSearch面试 - es 生产集群的部署架构是什么?

    ElasticSearch面试 - es 生产集群的部署架构是什么? 面试题 es 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片? 面试官心理分析 这个问题,包括后面 ...

  5. ElasticSearch面试 - es 写入数据的工作原理是什么啊?

    ElasticSearch面试 - es 写入数据的工作原理是什么啊? 面试题 es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗? ...

  6. 漫谈ElasticSearch关于ES性能调优几件必须知道的事(转)

    ElasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,Kibana是数据分析展示平台.ES让人 ...

  7. 【Elasticsearch】es 报错 no such index index_not_found_exception

    1.场景1 1.1 概述 在做 [Elasticsearch]es 快照 snapshot 操作实战 的时候,进行快照恢复的时候报错 创建一个索引 PUT some_index-300poetry 查 ...

  8. 【Elasticsearch】es 7.8.0 java 实现 BulkRequest 批量写入数据

    1.概述 本文章是在博客中需要 [Elasticsearch]es 7.8.0 唐诗三百首写入 Elasticsearch 会发生什么 我这里写了一个案例 /*** 测试点:bulk批量操作(批量添加 ...

  9. 【Elasticsearch】es IK分词器的安装

    1.概述 [Elasticsearch]es 7.8.0 唐诗三百首写入 Elasticsearch 会发生什么 之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字 ...

  10. 【Elasticsearch】es mapper_parsing_exception

    文章目录 1.场景1 1.1 概述 1.2 7.8 版本 2.场景2 1.场景1 1.1 概述 在es版本6.8.0中做这个实验, [Elasticsearch]es 7.8.0 唐诗三百首写入 El ...

最新文章

  1. 用TensorFlow实现的Mask R-CNN在人体语义分割上的效果
  2. 关于unity的一个不错的插件平台
  3. dede/archives_do.php,dedecms后台编辑文章时archives_do.php显示空白解决办法
  4. sql 优化之:聚集索引的重要性和如何选择聚集索引(系列五)
  5. 网易云信与极客邦科技联合,发起抗击疫情行动,百家企业贡献资源
  6. 牛客小白月赛16练习
  7. python连接ssh_使用Python连接到SSH
  8. 【白皮书分享】快手私域经营白皮书.pdf(附下载链接)
  9. 如何通过路由器日志查看路由器是否断网过_如何正确判断宽带问题还是路由器问题?...
  10. visio教程仓库流程图_教你使用visio 2013绘制产品流程图
  11. 免费试用华为云服务器一个月,部署自己的网站
  12. 微信/支付宝app支付相关参数
  13. 如何通过echarts绘制北京市地图并可以添加标记并可点击
  14. 小程序时间段选择 选取某天的某时间段 基于vantweapp的时间段选择器 日期选择器
  15. hihocoder1081
  16. 【个人感悟】如何学习计算机知识
  17. 英国电信进行下一代SDN测试
  18. 产教融合 | 数字技术工程师培育项目-大数据工程技术人员开班啦
  19. vt版本不见了_BIOS问题 我的版本BIOS 找不到 开启 intel vt-x功能
  20. python:抓取必应高清壁纸第一张并设置为壁纸 修改注册表 重启壁纸不丢失

热门文章

  1. 微服务与SOA的实践应用对比
  2. Spring Cloud Gateway 实现Token校验
  3. 苹果处理器性能排行榜天梯图2023 iphone处理器性能排行2023
  4. 在Vue项目中获取当前日期的农历日期(阴历)
  5. 7-1 镖局运镖 (30分)
  6. Qt5.7.0 msvc 32bit 的QML程序部署到xp系统
  7. Web前端:6种基本的前端编程语言
  8. quartz定时任务突然不执行了
  9. 理解移动语义(一)左值和右值
  10. 实现web前端上传excel文件到flask服务器