Elasticsearch 相关 api 操作
A. es 操作
1. 检查 es 集群健康状态
bash命令:curl -XGET 'localhost:9200/_cat/health?v&pretty'
kibana命令:GET /_cat/health?v
返回示例:
描述:可以看到红框范围内的值为 yellow,它代表了我们 es 服务集群的健康状态,详细描述如下。解读后我们可以了解到,我们的 yellow 状态对于日常使用没有影响,它只是因为我们的集群暂时由单节点服务器组成,没有多余的节点分配给我们的分片副本了,解决示例会在以后的文章中给出。
RED: Damnit. Some or all of (primary) shards are not ready.
YELLOW: Elasticsearch has allocated all of the primary shards, but some/all of the replicas have not been allocated.
GREEN: Great. Your cluster is fully operational. Elasticsearch is able to allocate all shards and replicas to machines within the cluster.
2. 获取集群中的节点列表
bash命令:curl -XGET 'localhost:9200/_cat /nodes?v?pretty'
kibana命令:GET /_cat/nodes?v
返回示例:
描述:注意最后的 name 即为我们某节点的唯一名称
以下描述中
所有的 kibana 命令都具有<REST HttpVerb> /<Index>/<Type>/<ID> <?pretty>格式
所有的 bash Curl 命令都具有curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'格式,请结合实际语句进行区分。
3. 创建索引
bash命令: curl -XPUT 'localhost:9200/customer?pretty&pretty'
kibana命令:PUT /customer?pretty
返回示例:
{
"acknowledged": true,
"shards_acknowledged": true
}
4. 获取索引
bash命令:curl -XGET 'localhost:9200/_cat/indices?v&pretty'
kibana命令:GET /_cat/indices?v
返回示例:
描述: 该条指令用于获取所有索引列表
5. 索引文档
bash命令:
curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"name": "John Doe"
}
'
kibana命令:
PUT /customer/external/1?pretty
{
"name": "John Doe"
}
返回示例:
{
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
描述:索引中可以存在不同的类型,我们刚刚便创建了类型 “external”及其文档,大家可以把它理解为关系型数据库中的表和列。索引时 ID 字段是可选的,假如我们没有指定,es 将自动为我们生成 ID(此种情况下需要使用 POST HTTPVerb)。
6. 查询文档
bash命令:curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'
kibana命令:GET /customer/external/1?pretty
返回示例:
{
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"name": "John Doe"
}
}
描述: 简单查询格式一般为 /index/type/id
7. 删除索引
bash命令:curl -XDELETE 'localhost:9200/customer?pretty&pretty'
kibana命令:DELETE /customer?pretty
返回示例:
{
"acknowledged": true
}
描述: 通过添加 * 通配符,我们可以删除所有形如 customer2017-3-8-11-26-58的索引。
8. 更新文档
bash命令:
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty&pretty' -H 'Content-Type: application/json' -d'
{
"doc": { "name": "Jane Doe", "age": 20 }
}
'
kibana命令:
POST /customer/external/1/_update?pretty
{
"doc": { "name": "Jane Doe", "age": 20 }
}
返回示例:
{
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 7, //修改次数
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
}
}
描述: 我们刚才针对之前录入的 customer 的某条 id 为 1 的数据进行了更新,并扩充了其属性。值得注意的是,当我们执行更新操作时,es 实际上是对索引的文档进行了删除并重建的操作,并不是真正意义上的更新。
9. 删除文档
bash命令: curl -XDELETE 'localhost:9200/customer/ external/2?pretty?pretty'
kibana命令:DELETE /customer/external/2?pretty
返回示例:
{
"found": true,
"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 8,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
}
}
10. 批量查询文档
bash命令: curl -XGET 'localhost:9200/customer/ external/_search?pretty'
kibana命令:GET /customer/external/_search?pretty
返回示例:
{
"took": 18,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "customer",
"_type": "external",
"_id": "AVqm6MRTU67sF7xAeJ5R",
"_score": 1,
"_source": {
"name": "John Doe"
}
},
{
"_index": "customer",
"_type": "external",
"_id": "AVqm6MURU67sF7xAeJ5S",
"_score": 1,
"_source": {
"name": "Jane Doe"
}
}
]
}
}
描述: 刚才演示的都是根据 ID 获取单条数据,但是如果 ID 是自动生成值,这样的方式就不十分友好了,所以 es 提供了 _search 关键字来进行对索引类型中所有资源的获取操作,默认获取前十条匹配信息。其实有心的读者应该也注意到刚才我们在进行 update 操作时,指令中也有 _update 关键字,而在 kibana 的控制台中,我们还能通过它的智能提示获取更多这样的简便操作指令。如 _count,_create等。后续也将介绍使用匹配规则来查找特定的文档。
11. 字符串查询文档
bash命令: curl -XGET 'localhost:9200/customer/external/_search?q=name:Jane'
kibana命令:GET /customer/external/_search?q=name:Jane Doe?pretty
返回示例: 暂略
描述: 字符串查询即是一种条件查询,q=name:Jane 即意味着我们想要查询 external 类型中属性 name 值含有 Jane 的文档,es 会自动将相关匹配返回给我们。假如想要了解更多,请参见 Simple Query String Query。
12. DSL条件查询文档
bash命令:
curl -XGET 'localhost:9200/customer/external/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"match" : {
"name":"Jane"
}
}
}
'
kibana命令:
GET /customer/external/_search?pretty
{
"query": {
"match" : {
"name":"Joe"
}
}
}
返回示例: 暂略
描述: DSL 被称为特定领域语言,如 T-SQL 就是一种 DSL。它提供了更丰富更强大的方法供给开发者使用,如以上代码和之前的字符串查询的含义便是相同,更多用法详见 Query-DSL。
13. 批量更新文档
bash命令:
curl -XPOST 'localhost:9200/customer/external/_bulk?pretty&pretty' -H 'Content-Type: application/json' -d'
{"index":{"_id":"AVqm6MRTU67sF7xAeJ5R"}}
{"name": "John Doe" }
{"index":{"_id":"AVqm6MURU67sF7xAeJ5S"}}
{"name": "Jane Doe" }
{"update":{"_id":"AVqm6MRTU67sF7xAeJ5R"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"AVqm6MURU67sF7xAeJ5S"}}
'
kibana命令:
POST /customer/external/_bulk?pretty
{"index":{"_id":"AVqm6MRTU67sF7xAeJ5R"}}
{"name": "John Doe" }
{"index":{"_id":"AVqm6MURU67sF7xAeJ5S"}}
{"name": "Jane Doe" }
{"update":{"_id":"AVqm6MRTU67sF7xAeJ5R"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"AVqm6MURU67sF7xAeJ5S"}}
返回示例:
{
"took": 30,
"errors": false,
"items": [
{
"index": {//ignore},
"created": false,
"status": 200
}
},
{
"index": {//ignore},
"created": true,
"status": 201
}
},
{
"update": {//ignore},
"status": 200
}
},
{
"delete": {//ignore},
"status": 200
}
}
]
}
描述: 不要被这么“多”的命令吓到了,其实我们仔细看下来,就会发现笔者只是让 es 执行了添加 id 为 xx 和 yy 的文档,然后再更新 id 为 xx 的文档内容,最后删除了 id 为 yy 的文档。一步到位,顺序执行,更不会因为中间某步出了错误便停止运行,所以有关于这个特性,希望大家在执行命令的时候要特别注意。
B. 结尾
通过上文的描述,我们已经初步了解了 es 中对于文档,类型和索引的相关操作,但是要注意,我们的努力仍然是十分粗糙的。更多的详细操作,大家可以参考官网的 api 文档,里面提到了本文省略的聚合,过滤条件查询和批量删除等十分有效的 api。
笔者之所以没提出省略的部分,只是因为这样编写文章的工程量将会比较繁重,而且考虑到开发者平时更多地会使用客户端进行远程操作,精通开发平台内专业工具的使用就已经足够应付大多数的需求了。
Elasticsearch 相关 api 操作的更多相关文章
- Elasticsearch java api操作(二)(Java High Level Rest Client)
一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...
- Elasticsearch java api操作(一)(Java Low Level Rest Client)
一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...
- selenium 相关api操作
driver.close(); //关闭程序 driver.findElement(By.id("idExpression")); //查找单个页面元素 driver.findEl ...
- elasticsearch 中文API(二)
客户端 有多个地方需要使用Java client: 在存在的集群中执行标准的index, get, delete和search 在集群中执行管理任务 当你要运行嵌套在你的应用程序中的Elasticse ...
- ElasticSearch之CURL操作(有空再去整理)
https://www.cnblogs.com/jing1617/p/8060421.html ElasticSearch之CURL操作 CURL的操作 curl是利用URL语法在命令行方式下工 ...
- 搜索引擎Elasticsearch REST API学习
Elasticsearch为开发者提供了一套基于Http协议的Restful接口,只需要构造rest请求并解析请求返回的json即可实现访问Elasticsearch服务器.Elasticsearch ...
- 第08章 ElasticSearch Java API
本章内容 使用客户端对象(client object)连接到本地或远程ElasticSearch集群. 逐条或批量索引文档. 更新文档内容. 使用各种ElasticSearch支持的查询方式. 处理E ...
- Elasticsearch Java API深入详解
0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...
- Elasticsearch Java API 很全的整理
Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种.相比来说transportClient API效率更高, ...
随机推荐
- Nsis Sqlite Plugin
1.https://stackoverflow.com/questions/15346338/nsis-and-sqlite-integration 2.http://nsis.sourceforge ...
- mysql安装笔记-rpm
基本内容: 1.需要解决两个依赖 2.需要解决一个包冲突 3.安装mysql服务,以及客户端client 4.修改root的随机密码 5.授予root用户,从任何机器访问任何数据库的任何表的权限 1. ...
- IntelliJ IDEA project module
在IDEA 创建一个project,目录结构是这样的:在project下创建一个module之后目录结构是这样的: 简单的概括如下: IntelliJ系中的 Project 相当于Eclipse系中 ...
- SVN的基本操作
右键SVN Commit 提交成功了,我们把SVN的服务器端刷新一下 所有的操作如果只是删除本地的文件都不会影响服务器端的文件,除非右键SVN Commit删除文件或者是新增文件才会对服务器端的仓库里 ...
- Sorting(好题)
Sorting https://www.zhixincode.com/contest/21/problem/I?problem_id=324 题目描述 你有一个数列a_1, a_2, \dots, a ...
- 分割回文串 II · Palindrome Partitioning II
[抄题]: 给定一个字符串s,将s分割成一些子串,使每个子串都是回文. 返回s符合要求的的最少分割次数. [思维问题]: 不知道要用预处理字符串降低复杂度 [一句话思路]: 先把预处理获得s中回文串的 ...
- cin 不能直接读入空格,可以用getline(PAT统计字符数)
#include <iostream>#include <cstring>using namespace std; int main(){ string str; ...
- 面向对象设计模式纵横谈:Prototype 原型模式(笔记记录)
有一段时间没写东西了,今天继续把没写完的设计模式写完,今天这堂课是创建型设计模式的最后一堂课,原型设计模式,它同样也是解决了对象在创建的过程中的解耦合的情况,面对变化使代码更稳定,更准确的说是使 ...
- 在原型设计上,UI和UX设计师有哪三个区别?
原型设计在日常的软件开发过程中是必不可少的,不管是UI还是UX设计师,很多工作都会涉及到原型设计.那么这两类设计师在设计原型的时候表现出了哪些的不同点呢?今天就让我们来讨论一下,先说说我发现的3个不同 ...
- kerberos认证的步骤,学习笔记
.KDC,uname,upwd -x算法=>authticator 暗号 .KDC ->uname,pwd->x1算法->解密authticator 确认客户端身份->生 ...