elasticsearch Getting Started (四)-修改数据
2016-09-21 16:05
253 查看
@[ElasticSearch]
作者博客地址
原文链接(英文)
我们将数据索引到了指定的
上面的命令将文档中,ID为1的
上面的命令索引了一条数据到ID2中。
在索引数据过程中,
注意在上面的命令中,我们使用了
下面的命令更新了前文中我们的ID为1的文档,将
下面的命令更新了前文中我们的ID为1的文档,将
还可以通过使用简单的脚本来进行更新操作。下面的例子用脚本语言将
上面例子中,
在本文完成时,更新操作只能一次在一条文档中进行,以后
作为一个简单的例子,下面的命令可以使用一条
下面的例子在一条
对于上面的删除操作后面没有指定的相应的文档,因为删除操作只需要被删除的文档ID。
作者博客地址
原文链接(英文)
Elasticsearch提供准实时的数据操作和查询能力。默认情况下,从你索引,删除,更新数据到可以查询之间有1s的延时(refresh interval),这是
Elasticsearch和其他完成事务之后数据立即可用的平台(例如SQL)之间最大的区别。
索引和替换数据
前文我们提到过如何索引一个单独的索引,现在重新拿过来,如下所示:curl -XPUT 'localhost:9200/customer/external/1?pretty' -d ' { "name": "John Doe" }'
我们将数据索引到了指定的
customer索引
external类型的ID1中。接下来我们可以执行下面的命令,将新的文档替换(reindex)掉原来已经存在的ID为1的文档:
curl -XPUT 'localhost:9200/customer/external/1?pretty' -d ' { "name": "Jane Doe" }'
上面的命令将文档中,ID为1的
name从
John Doe替换成了
Jane Doe,如果我们使用其他的ID而不是1的话,一条新的文档将会索引到
Elasticsearch,而原来的数据保持不变。
curl -XPUT 'localhost:9200/customer/external/2?pretty' -d ' { "name": "Jane Doe" }'
上面的命令索引了一条数据到ID2中。
在索引数据过程中,
ID是可选的,如果没有指定的话,
Elasticsearch会随机生成一个ID,用这个ID去索引数据。不论是指定的还是自动生成的ID都会作为数据索引的结果返回。
curl -XPOST 'localhost:9200/customer/external?pretty' -d ' { "name": "Jane Doe" }'
注意在上面的命令中,我们使用了
POST代替
PUT,而且没有指定ID。
更新文档
除了可以索引和替换数据,我们也可以更新数据,但是Elasticsearch做不到在原来的数据中进行更新。当我们做更新操作时,
Elasticsearch会删除原来的数据,索引一个更新过数据的新的文档到
Elasticsearch中。
下面的命令更新了前文中我们的ID为1的文档,将
name字段的值更改为了
Jane Doe:
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d ' { "doc": { "name": "Jane Doe" } }'
下面的命令更新了前文中我们的ID为1的文档,将
name字段的值更改为了
Jane Doe,同时添加了一个新的字段
age:
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d ' { "doc": { "name": "Jane Doe", "age": 20 } }'
还可以通过使用简单的脚本来进行更新操作。下面的例子用脚本语言将
age字段加了5:
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d ' { "script" : "ctx._source.age += 5" }'
上面例子中,
ctx._source指定的是当前需要更新的文档。
在本文完成时,更新操作只能一次在一条文档中进行,以后
Elasticsearch可能会提供更新多个文档的能力,就像SQL中的
UPDATE-WHERE语句。
删除文档
删除文档相当的简单。下面的命令展示了怎样删除我们前文customer中ID为2的文档:
curl -XDELETE 'localhost:9200/customer/external/2?pretty'
delete-by-query插件可以指定查询中所有的文档。
批处理
除了可以对单个文档进行索引,更新,删除操作,Elasticsearch也提供了对多个文档进行上述操作的批处理的能力。
_bulk API提供了一种高效的机制进行快速的多个操作而且尽量少的进行网络交换。
作为一个简单的例子,下面的命令可以使用一条
bulk命令索引两条数据:
curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d ' {"index":{"_id":"1"}} {"name": "John Doe" } {"index":{"_id":"2"}} {"name": "Jane Doe" } '
下面的例子在一条
bulk操作中先更新了第一条文档,然后删除了第二条文档:
curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d ' {"update":{"_id":"1"}} {"doc": { "name": "John Doe becomes Jane Doe" } } {"delete":{"_id":"2"}} '
对于上面的删除操作后面没有指定的相应的文档,因为删除操作只需要被删除的文档ID。
bulk操作会顺序执行所有的
actions。如果一个单个的操作失败了,会继续执行剩下的部分。在返回结果中,它会提供每个操作的执行状态,顺序跟执行顺序相同,这样就可以看到所有操作的执行状态。
相关文章推荐
- 在Kubernetes上搭建EFK(Fluentd+Elasticsearch+Kibana)
- 巧用mysql提示符prompt清晰管理数据库的方法
- 两大步骤教您开启MySQL 数据库远程登陆帐号的方法
- phpmyadmin 4+ 访问慢的解决方法
- linux系统下实现mysql热备份详细步骤(mysql主从复制)
- CentOS 5.5下安装MySQL 5.5全过程分享
- MySQL复制的概述、安装、故障、技巧、工具(火丁分享)
- MySQL中删除重复数据的简单方法
- MySQL5.5.21安装配置教程(win7)
- 使用ElasticSearch6.0快速实现全文搜索功能的示例代码
- elasticsearch批量数据导入和导出
- 欠饿了么一顿外卖
- 使用ElasticSearch+LogStash+Kibana+Redis搭建日志管理服务
- ElasticSearch 使用心得
- ES中如何使用逗号来分词
- elk 简单实用
- ElasticSearch 守护进程 JSW
- elasticsearch2.3安装以及集群部署
- elasticsearch增删改查