之前文章学习了Elaticsearch的基本操作和使用chrome的IDE工具进行编程,包括Elasticsearch的术语,知道Elasticsearch的内部架构和术语表达,清楚了索引,分区、映射、还有文档等结构文章后。这篇文章主要讲述如何使用ELasticsearch的指令做一些基础的操作。
目录
Elasticsearch数据的准备
1、首先是数据的准备,这方便可以编辑,可以拿人事数据表格做案例。我是借用平台的基础数据做支撑。
我将建立两个索引一个是管理者,一个是用户,分别为门户网站的版主和用户两个角色,两个索引 user_admin
和 user
,分别用于索引版主和普通用户,而且它们有功能的类型 type
,都是 user。每个字段的数据类型也标记出来,辨别查找。
Elasticsearch数据的增加
先建立第一个索引
PUT http://localhost:9200/user_admin?pretty
结果为:
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "user_admin"
}
加入对应的数据,数据方便可以自己准备,或者借鉴平台的数据。
第二建立用户的索引
POST http://localhost:9200/user?pretty
响应为:
"acknowledged": true,
"shards_acknowledged": true,
"index": "user"
}
为第二个索引增加数据
小总结:
_bulk 模式 JSON 串有逆天的要求:每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行,最后要以一个新行结尾
否则就会报错:json_e_o_f_exception;我试了很多遍,但是报错,数据的填充格式要求很高,所以认清楚自己的数据格式,做要数据填充。
我们有提到 Elasticsearch 的 RESTful API 使用 HTTP 作为传输协议,使用 JSON 作为数据交换格式。但是,在 API 细节方面,Elasticsearch 还有一些简单的约定。
API,是 Application Programming Interface 的简写,中文译为 应用程序编程接口。API 是对一组函数调用或用于访问特定 Web 应用程序中的软件组件的其他编程指令,例如,微博 ( Weibo ) API 可帮助开发人员通过访问来自 微博 的数据或其它功能来创建应用程序,比如实现使用微博账号登录。因为 Elasticsearch 的 RESTful API 使用 HTTP 作为传输协议,使用 JSON 作为数据交换格式,所以它对如何使用 HTTP 发起请求和返回响应,如何使用 JSON 制定了一些规范。
通用符号对多个索引的支持
使用逗号分隔符,发起向索引1、索引2、索引*发起请求,查询含有"any_string"的字符请求。
通配符的使用,包括*,+,-,可以单独使用,使用*通配符是匹配任意的字符串。
假设搜索的索引PHP不存在的话,可以使用allow_no_indices参数进行阻止抛出错误。(如果单一搜索PHP的索引时,会报错显示索引不存在。)
expend_wildcards用于设置是否需要扩展通配符以打开索引或封闭索引或两者该参数都可以指是
参数值 | 说明 |
OPEN | 打开索引 |
CLOSE | 关闭索引 |
NONE | 未定义,使用系统默认 |
ALL | 全部打开 |
使用参数关闭和开启索引。
使用响应参数
1、使用pretty=true来设定返回的JSON数据将具有良好的格式以方便阅读
使用filter_path该参数用于筛选响应中的字段
Elasticsearch版本化控制
在早期的7.0.0以前的版本查询参数用Version来指定特定文档的版本,但是7.0.0以后的版本做了升级改造,指令做了更新。版本化控制又分两个模式来控制。
内置版本控制:
首先增加索引和文档。
接着用版本2来记录版本的更改,但是报错提示使用“if_seq_no” and “if_primary_term”两个参数进行替换。
更改使用7.0.0版的操作指令的话,已经正常进行版本记录。
再次用原来if_seq_no或if_primary_term的参数进行操作,服务端提示版本已经冲突系统范围,必须更换版本号才能标记。这里只需要将if_seq_no的参数更改为1,或者递增即可。
外置版本控制
使用version_type=external参数进行控制。这里有个小细节,注意version设置的版本。不管是外置版本控制,内置版本控制都要注意版本号。两者建立的版本号是在同一片分区上有相关联的。比如内置建设1版本号,外置就必须从2版本号开始建立。
因为之前内置版本号,我建立2版本的修好记录,此刻就用3来记录版本号。
内置_version,只有当你提供的version与es中的_version完全一样的时候,才可以进行更新,否则报错;
外部_version,只有当你提供的version比es中的_version大的时候,才能完成修改。
这里参考官网文档Index API | Elasticsearch Guide [6.8] | Elastic和网友文档ES之4:Elasticsearch并发控制及乐观锁实现原理 - duanxz - 博客园
总结版本化控制,必须参考官方网站最近发布的模块使用方式,注意版本升级后,一些指令的操作,注意查看报错信息,追踪错误根源。版本控制是一个实时过程,不受实时搜索操作的影响。
操作类型
使用操作类型参数op_type为create用于强制执行创建操作,避免覆盖现有文档。
POST http://localhost:9200/python/lession/1?op_type=create
Elasticsearch在索引操作中如果未指定ID,那么Elaticsearch会自动为该文件生成文档的标识ID
超时记录
POST http://localhost:9200/python/lession/2?timeout = 3m
获取文档信息
使用GET指令进行操作,获取文档的详细信息。
可以通过向 Elasticsearch 发送 HTTP DELETE 请求来删除特定索引,映射或文档
更新文档,使用update参数,传递script对象来更新用户信息。
如果更新过程中抛出了 script
异常,则建议在 elasticcisearch.yml
中添加以下行,然后重启 Elasticsearch 服务
script.inline: on
script.indexed: on
然后我们就可以通过向更新的文档发送获取请求来检查更新情况 :GET http://localhost:9200/user_admin/user/1
多个文档获取操作
使用mget请求可以返回多个文档,一半使用doc数组来指定需要提取的所有文档的索引,类型和ID
Elasticsearch 搜索 API
本章节,我们要学习和介绍的 API 用于在 Elasticsearch 中搜索内容,我们可以通过以查询字符串作为参数或发送请求消息正文中的查询发送获取请求来进行搜索
多索引,比如搜索文档中含有“飞”的所有文档,可以发起下面请求:
我们还可以搜索所有类型或某种指定类型的索引中的所有文档
我们同样使用请求正文中使用查询DSL来指定查询
Elasticsearch 聚合计算
聚合框架用于收集搜索查询选择的所有数据。该框架由许多构建块组成,有助于构建复杂的数据摘要
矩阵聚合 ( Metrics )
这些聚合函数可以根据聚合文档的字段值计算度量值,而且有时可以从脚本生成一些值
数字矩阵既可以是单值,也可以是平均聚合或多值统计等
平均数聚合 ( avg )
该聚合函数用于计算文档中出现的任何数字字段的平均值
基数聚合 ( cardinality )
基数聚合 ( cardinality ) 用于计算特定字段的不同值的计数,这个在6.0以后版本,我没找到官方指令,如果网友有知道告诉我怎么查。
官方地址:Aggregations | Elasticsearch Guide [8.0] | Elastic
扩展统计聚合 ( extended_stats )
此聚合用于生成有关聚合文档中特定数字字段的所有统计信息
最大值聚合 ( max )
最大值聚合用于查找聚合文档中特定数字字段的最大值
最小值聚合 ( min )
最小值聚合用于查找聚合文档中特定数字字段的最小值
求和聚合 ( sum )
求和聚合 ( sum ) 用于计算聚合文档中特定数字字段的总和
聚合元数据
可以在请求时使用 meta
参数添加关于聚合的一些数据,然后就可以在响应时获取到这些数据
Elasticsearch 索引 API
当用户将 JSON 对象传递给任何索引时,可以自动创建索引。当然,也可以不传递任何数据,而是使用默认设置创建一个索引。要创建索引,只需要发送带有设置,映射和别名的 HTTP POST 请求,或者只是一个没有正文的简单请求
例如下面的请求使用默认设置创建一个索引,并加入请求正文的数据
删除索引的值,使用Delete
获取索引的数值
请求别名
发起一个 HTTP POST 请求并在 URL 中添加 _aliases
路径参数即可为任何索引创建一个别名
单个别名可以映射到多个,但是别名不能和索引名一样。aliases相当于别名的命名,linux中也用aliase来替代个别复杂指令的命名。
、
搜索别名user_nor来,找到这个索引内容数据。
索引设置
通过发送一个 HTTP GET 请求并向 URL 中添加 _settings
路径参数来获取某个索引的设置
分析
可以通过向 /_analyze
发起一个 HTTP POST 请求并传递需要分析的文本和分析器类型来分析一段文本
索引统计
可以向某个索引发起一个 HTTP GET 请求并在 URL 中添加 _stats
路径参数来获取某个索引的统计信息
刷新索引缓冲区
刷新索引缓冲区指的是清除索引内存中的数据并将其迁移到索引存储,并清除内部事务日志
刷新索引缓冲区的方法很简单,只要向一个索引发起一个 HTTP GET 请求并在 URL 中添加 _flush
路径参数即可
刷新索引
Elasticsearch 默认内置了刷新机制
当然我们也可以手动显式刷新索引
方法就是向一个索引发起一个 HTTP GET 请求并在 URL 中添加 _refresh
路径参数即可
Elasticsearch 集群管理 API
本章节要介绍的这些 API 用于获取有关集群及其节点的信息,并且可以对集群进行更改
调用这些 API 时,我们需要指定节点的名称、地址或使用 _local
路径参数(GET http://localhost:9200/_nodes/127.0.0.1)此语句使用_nodes 快编号生成响应相同。
集群健康情况
可以在集群信息上追加 health
路径参数来查询集群的健康情况
例如下面的查询
集群统计信息
此 API 通过在 URL
上追加 stats
关键字来检索有关集群的统计信息
返回的内容包括分片编号,存储大小,内存使用情况,节点数,角色,操作系统和文件系统
例如下面的请求 GET http://localhost:9200/_cluster/stats
结果就不截图了,有兴趣网友更深次的学习。
总结此章节:API的接口很多种类型,认清需求是什么,在官方网站找寻对应的指令进行操作。有一些指令,可能在新的版本被替换了,注意新版本的指令模式是什么。还要分清楚索引、类型、字段、数据、映射等关系,每个关系对应用法要记忆在脑海中。Elasticsearch官方的操作文档很大,详细可以参考官方操作手册,文章有些出错地方,请网友指导。