列出所有索引

GET /_cat/indices?v

返回内容如下:

health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana XYZPR5XGQGWj8YlyZ1et_w .1kb .1kb

可以看到在集群中有一个索引

创建索引

现在让我们创建一个名叫 customer 的索引,然后再次列出所有的索引

PUT /customer?pretty
GET /_cat/indices?v

执行第一行返回以下内容,这里我们使用PUT谓词创建了一个名叫 customer 的索引,在后面跟上 pretty 表示如果有数据返回的话,用格式化后的JSON返回数据

{
"acknowledged": true,
"shards_acknowledged": true
}

执行第二行返回以下内容,结果告诉我们,已经创建了一个名叫 customer  的索引,它有5个主分片和1个复制分片(默认情况下是1个),在这个索引中还没有文档。

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana XYZPR5XGQGWj8YlyZ1et_w .1kb .1kb
yellow open customer M8i1ZxhsQJqk7HomOA7c_Q 650b 650b

可能你已经注意到 customer 索引的健康值被标记为 yellow ,回顾我们前面讨论的内容, yellow 表示该索引的复制分片(副本)还没有被分配。该索引出现这种情况的原因是, Elasticsearch 默认会为该索引创建1个副本,由于此时我们只有1个节点,那么这副本就没法被分配(为了高可用),直到以后为该集群加入了另一个节点。一旦该副本分配到了另一个节点,该索引的健康状态就会变成 green 。

索引和查询文档

接下来我们放一些东西到 customer  索引中。之前提过的,为了索引某个文档,我们必须告诉 Elasticsearch  ,该文档应该属于该索引的哪个类型,下面我们索引一个简单的文档到 customer  索引,类型名称为 external ,  并且ID为1

PUT /customer/external/?pretty
{
"name": "John Doe"
}

返回内容如下:

{
"_index": "customer",
"_type": "external",
"_id": "",
"_version": ,
"result": "created",
"_shards": {
"total": ,
"successful": ,
"failed":
},
"created": true
}

从以上可以看出,一个新的客户文档成功被索引到 customer索引的 extenal 类型中,并且我们在索引的时候指定文档的内部id值为1。

值得注意的是, Elasticsearch 不需要在你索引文档到某个索引之前,明确的创建一个索引。比如上一个例子,如果 customer索引不存在, Elasticsearch将自动创建该索引。

再来看下我们刚刚索引的文档

GET /customer/external/?pretty

返回内容如下:

{
"_index": "customer",
"_type": "external",
"_id": "",
"_version": ,
"found": true,
"_source": {
"name": "John Doe"
}
}

这里比较特殊的是found字段,它说明我们查到了一个id为1的文档,另一特殊的字段_source,保存了在上一个步骤索引的的文档。

删除索引

现在让我们删除刚刚已经创建的索引,并再次查看所有索引。

DELETE /customer?pretty
GET /_cat/indices?v

第一行返回内容以下:

{
"acknowledged": true
}

第二行返回内容如下:

health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana XYZPR5XGQGWj8YlyZ1et_w .1kb .1kb

从以上内容可以看到我们的 customer索引已经被删除了。

在继续学习之前,让我们快速回顾一下,本节学的API命令

PUT /customer
PUT /customer/external/
{
"name": "John Doe"
}
GET /customer/external/
DELETE /customer

如果仔细学习了以上命令,应该会发现 elasticsearch 访问数据所使用的模式,概括如下:

<REST Verb> /<Index>/<Type>/<ID>

使用REST 访问模式,在所有的API命令中是十分普遍的,如果你可以简单记住它,对于掌握 Elasticsearch ,那么已经开了一个好头。

修改数据

Elasticsearch  具有近实时的操作和查询数据的能力,默认情况下,从你索引,更新或者删除你的数据到用户可以搜索到新的结果这个过程大概需要1秒(基于refresh 频率)。它们和类似SQL这样的平台不一样,SQL的数据在事务完成后就马上就生效,不会有延迟。

索引/替换文档

之前已经演示了怎么索引单个文档,再来回顾一下:

PUT /customer/external/?pretty
{
"name": "John Doe"
}

上面的命令将会索引指定文档到 customer 索引的 external 类型,文档的id值是1。如果我们用不同的文档内容(或者相同)再次执行上面的命令,elasticsearch将会用一个新的文档取代旧的文档(即重建索引)。

PUT /customer/external/?pretty
{
"name": "Jane Doe"
}

上面的操作把id为1的文档的name字段由"john doe"改成"jane doe"。另一方面,如果我们使用不同的id执行上述命令,将会创建一个新的文档,旧的文档会保持原样。

PUT /customer/external/?pretty
{
"name": "Jane Doe"
}

以上操作索引了一个新的id为2文档。

索引新文档的时候,id值是可选的。如果没有指定, elasticsearch 将会为文档生成一个随机的id。实际生成的id将会保存在调用api接口的返回结果中。

下面的例子展示不指定文档id的时候是如何索引文档的:

POST /customer/external?pretty
{
"name": "Jane Doe"
}

返回内容如下:

{
"_index": "customer",
"_type": "external",
"_id": "AVyc9L6dtgHksqXKpTlM",
"_version": ,
"result": "created",
"_shards": {
"total": ,
"successful": ,
"failed":
},
"created": true
}

注意,在上面的例子中,因为没有指定id,我们需要使用POST谓词取代之前的PUT谓词。

更新文档

除了可以索引和替换文档之外,我们还可以更新文档。注意, elasticsearch 并没有在原来的文档基础上进行更新,每当进行更新时, Elasticsearch 将删除旧的文档,然后索引新的文档。以下例子演示了如何更新文档,把之前ID为1的name字段改为"Jane Doe":

POST /customer/external//_update?pretty
{
"doc": { "name": "Jane Doe" }
}

以下例子演示了如何更新先前ID为1的文档,改变name字段为"Jane Doe" 的同时添加age字段

POST /customer/external//_update?pretty
{
"doc": { "name": "Jane Doe", "age": }
}

也可以使用简单的脚本来执行更新。以下示例使用脚本将年龄增加5:

POST /customer/external//_update?pretty
{
"script" : "ctx._source.age += 5"
}

在以上例子中, ctx._source 指当前即将被更新的源文档。请注意,在撰写本文时,只能一次更新单个文档。将来, Elasticsearch 可能会提供通过查询条件(如SQL UPDATE-WHERE语句)更新多个文档的功能。

删除文档

删除文档非常简单,以下例子演示了怎么删除 customer 索引下ID为2的文档,查阅Delete By Query API 删除与特定查询匹配的所有文档。值得注意的是,直接删除整个索引比通过query api 删除所有文档更高效。

DELETE /customer/external/?pretty

批处理

除了能够索引,更新和删除单个文档之外, Elasticsearch  也提供了使用  _bulk API 批量执行上述任何操作的功能。这个功能是非常重要的,因为它提供了一个非常有效的机制来尽可能快地进行多个操作,并且尽可能减少网络的往返行程。简单举个例子,下面会在一个 bulk操作中索引两个文档:

POST /customer/external/_bulk?pretty
{"index":{"_id":""}}
{"name": "John Doe" }
{"index":{"_id":""}}
{"name": "Jane Doe" }

返回内容如下:

{
"took": ,
"errors": false,
"items": [
{
"index": {
"_index": "customer",
"_type": "external",
"_id": "",
"_version": ,
"result": "created",
"_shards": {
"total": ,
"successful": ,
"failed":
},
"created": true,
"status":
}
},
{
"index": {
"_index": "customer",
"_type": "external",
"_id": "",
"_version": ,
"result": "created",
"_shards": {
"total": ,
"successful": ,
"failed":
},
"created": true,
"status":
}
}
]
}

下面的例子会在一个操作内更新第一个文档同时删除第二个文档:

POST /customer/external/_bulk?pretty
{"update":{"_id":""}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":""}}

返回内容如下:

{
"took": ,
"errors": false,
"items": [
{
"update": {
"_index": "customer",
"_type": "external",
"_id": "",
"_version": ,
"result": "updated",
"_shards": {
"total": ,
"successful": ,
"failed":
},
"status":
}
},
{
"delete": {
"found": true,
"_index": "customer",
"_type": "external",
"_id": "",
"_version": ,
"result": "deleted",
"_shards": {
"total": ,
"successful": ,
"failed":
},
"status":
}
}
]
}

注意以上的删除操作,在它之后并没有相应的源文档,因为只需要文档的ID就能删除。

如果某个操作因某些原因执行失败,不会影响后面的操作,它会继续执行剩下的操作。api返回结果时,每一个操作都会提供状态(和接收到的顺序一致),你可以通过这个状态检查操作是否执行成功。

总结

简单的索引操作

1、查看集群中的索引, GET /_cat/indices?v

2、创建索引 PUT /product?pretty 。(es会自动建立index和type,不需要提前创建,而且es默认会对document每个field都建立倒排索引,让其可以被搜索)

3、删除索引, DELETE /test_index?pretty

文档的CRUD操作

1、新增商品

PUT /product/goods/
{
"goods_id": "",
"goods_name": "索爱C702c",
"createTime": "2016-12-21",
"goods_type": [
"华为",
"乐视",
"小米"
]
}

2、查询商品, GET /product/goods/

3、修改商品

方式1:替换文档(和创建一样,所有字段必须写全)

PUT /product/goods/
{
"goods_id": "",
"goods_name": "联想笔记本",
"createTime": "2017-05-21",
"goods_type": [
"电脑"
]
}

字段不写全的情况

方式2:更新文档

POST /product/goods//_update
{
"doc":{
"goods_name":"iphone手机"
}
}

比较创建,更新,替换文档返回结果:

4、删除商品, DELETE /product/goods/

官方文档

https://www.elastic.co/guide/en/elasticsearch/reference/current/_exploring_your_cluster.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/_modifying_your_data.html

参考文档

https://github.com/13428282016/elasticsearch-CN/wiki/es-gettting-started

Elasticsearch索引和文档操作的更多相关文章

  1. elasticsearch的索引操作和文档操作总结

    参考文档:https://es.xiaoleilu.com/010_Intro/00_README.html 一.索引操作 1.查看当前节点的所有的index 查看当前节点的所有的index [roo ...

  2. 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查

    第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...

  3. 四十一 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查

    elasticsearch(搜索引擎)基本的索引和文档CRUD操作 也就是基本的索引和文档.增.删.改.查.操作 注意:以下操作都是在kibana里操作的 elasticsearch(搜索引擎)都是基 ...

  4. Elasticsearch (1) 文档操作

    本文介绍如何在Elasticsearch中对文档进行操作. 1.检查Elasticsearch及Kibana运行是否正常 在浏览器输入192.168.6.16:9200,有如下输出则说明Elastic ...

  5. Jquery的事件操作和文档操作

    对于熟悉前端开发的小伙伴,相信对于Jquery一定不陌生,相对于JavaScript的繁琐,Jquery更加的简洁,当然简洁不意味着简单,我们可以使用Jquery完成我们想要实现全部功能,这里为小白们 ...

  6. 详细描述一下 Elasticsearch 索引文档的过程 ?

    面试官:想了解 ES 的底层原理,不再只关注业务层面了. 解答: 这里的索引文档应该理解为文档写入 ES,创建索引的过程. 文档写入包含:单文档写入和批量 bulk 写入,这里只解释一下:单文档写入流 ...

  7. 详细描述一下 Elasticsearch 索引文档的过程 ?

    这里的索引文档应该理解为文档写入 ES,创建索引的过程. 文档写入包含:单文档写入和批量 bulk 写入,这里只解释一下:单文档写入流程. 记住官方文档中的这个图. 第一步:客户写集群某节点写入数据, ...

  8. 分布式搜索elasticsearch 索引文档的增删改查 入门

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/ ...

  9. head插件对elasticsearch 索引文档的增删改查

    1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口.  RESTful接口URL的格式: http://localhost:9200 ...

随机推荐

  1. linux网络编程(socket)之面向连接(TCP/IP)

    1.流程 服务器: 创建socket: 绑定端口: 监听: 监听到有连接请求,接受请求: 建立连接,开始对话. 客户端: 创建socket: 请求建立连接: 连接建立成功,开始对话. 2.实例代码 / ...

  2. 苹果笔记本只能上QQ,微信,任何浏览器不能打开网页的问题。

    我的笔记本一共遇到过两次这种情况.第一次是浏览器输入域名打不开网页,而输入ip地址可以打开.这就是DNS服务器的问题,解决方法很简单.在系统偏好设置里面找到网络,然后,点击正在连接的网络的高级选项,选 ...

  3. hdu1160dp

    https://vjudge.net/contest/68966#problem/J #include<map> #include<set> #include<list& ...

  4. Transform java future into completable future 【将 future 转成 completable future】

    Future is introduced in JDK 1.5 by Doug Lea to represent "the result of an asynchronous computa ...

  5. MySQL游标的简单实践

    Q:为什么要使用游标? A: 在存储过程(或函数)中,如果某条select语句返回的结果集中只有1行,可以使用select into语句(上几篇博客有介绍到用法)来得到该行进行处理:如果结果集中有多行 ...

  6. Unity 消息发送机制 解析

    该博客,只为解析,解析,解析,已经整理好,已经整理好,已经整理好.代码核心原理套用网上最流行的那一套,也是最常用游戏开发适用的消息机制.这里面加上自己的一些优化,极大的修正(哈哈),实测,没问题.万一 ...

  7. Centos7.3 安装Mysql5.7并修改初始密码

    1.官方安装文档 http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 2.下载 Mysql yum包 http://dev.mysql.co ...

  8. list和map集合

    List特点:元素有放入顺序,元素可重复Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)Map特点: ...

  9. Redis学习-复制

    Redis支持简单且易用的主从复制(master-slave replication)功能, 该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品.以 ...

  10. 解决xshell连接不上Ubuntu

    起初,我虚拟上网是通过NAT上网的,xshell 可以正常连接Ubuntu . 后来有段时间,主机上网频繁断线,于是,我将网络适配器VM1,VM8禁用了. 还有一次,麻烦公司同事远程协助,虚拟机通过桥 ...