Elasticsearch 管理文档

ES支持近实时的索引、更新、查询、删除文档,近实时就意味着刚刚索引的数据需要1秒钟后才能搜索到,这也是与传统的SQL数据库不同的地方。

更多的ES文档资料参考:Elasticsearch官方文档翻译

索引/替换文档

之前已经试过如何索引一个文档了,这里再复习一下:

curl -XPUT ‘localhost:9200/customer/external/1?pretty‘ -d ‘
{
  "name": "John Doe"
}‘

上面的例子中,创建了一个索引为customer,类型为external,id为1的文档。

当再次执行命令:

curl -XPUT ‘localhost:9200/customer/external/1?pretty‘ -d ‘
{
  "name": "Jane Doe"
}‘

之前的第一个文档就被覆盖掉了。

如果指定新的文档id,那么旧的文档仍然存在:

curl -XPUT ‘localhost:9200/customer/external/2?pretty‘ -d ‘
{
  "name": "Jane Doe"
}‘

索引的时候ID是可选的,如果不指定ID,ES会随机生成一个ID,并使用这个ID索引文档数据。

curl -XPOST ‘localhost:9200/customer/external?pretty‘ -d ‘
{
  "name": "Jane Doe"
}‘

需要注意的是,如果不指定ID,那么需要使用POST命令,而不是PUT。

更新文档

除了索引和替换文档,ES还支持更新文档。更新文档其实是先删除旧的文档,再索引新的文档。

如果想要更新文档内容,可以按照下面的方式进行:

curl -XPOST ‘localhost:9200/customer/external/1/_update?pretty‘ -d ‘
{
  "doc": { "name": "Jane Doe" }
}‘

由于是先删除再索引,因此可以额外增加新的字段:

curl -XPOST ‘localhost:9200/customer/external/1/_update?pretty‘ -d ‘
{
  "doc": { "name": "Jane Doe", "age": 20 }
}‘

当然也支持使用脚本进行更新:

curl -XPOST ‘localhost:9200/customer/external/1/_update?pretty‘ -d ‘
{
  "script" : "ctx._source.age += 5"
}‘

其中ctx._source代表了当前的文档,上面的意思 是 在当前文档的基础上age加5.

删除文档

删除文档就很简单了,只需要指定文档的索引、类型、ID就行了:

curl -XDELETE ‘localhost:9200/customer/external/2?pretty‘

批量操作

除了索引、替换、更新和删除,ES为了减少来回的响应信息,可以一次性执行多个命令,最后统一返回执行结果。

例如:

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为1的文档,再删除id为2的文档。

如果bulk中的某一个命令执行出错,那么会继续执行后面的命令,最后在命令返回时,会返回每个命令的执行结果。

时间: 2024-12-28 18:37:35

Elasticsearch 管理文档的相关文章

2015-郭辉-项目采购管理+文档配置管理

一.采购管理1.采购管理的主要过程: 编制采购计划,编制询价计划,询价,供方选择,合同管理,合同收尾.2.工作说明书与范围说明书的区别: 工作说明书是对产品或服务的叙述性描述.范围说明书通过明确所需完成的工作确定了项目范围.3.招投标程序是什么: 1.发布招标公告. 2.根据项目情况 ,可以组织潜在投标人勘探现场. 3.投标. 4.开标. 5.评标. 6.确定中标人. 7.订立合同.4.采购审计的定义和内容. 整个采购过程中,采购审计都对采购的完整过程进行系统审查.目标是找出本次采购的失败和成功

elasticsearch 路由文档到分片

路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是随机的,因为我们将来要检索文档.事实上,它根据一个简单的算法决定: shard = hash(routing) % number_of_primary_shards routing值是一个任意字符串,它默认是_id但也可以自定义.这个routing字符串通过哈希函数生成一个数字,然后除以主切片的数量

ElasticSearch部署文档(Ubuntu 14.04)

ElasticSearch部署文档(Ubuntu 14.04) 参考链接 https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html#setup-configuration https://www.elastic.co/guid

007-elasticsearch【一】概述、Elasticsearch 访问方式、Elasticsearch 面向文档、常用概念

一.概述 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目标是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API. 然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎. 它可以被下面这样准确的形容: 一个分布式的实时文档存储

ElasticSearch 面向文档性

在应用程序中对象很少只是一个简单的键和值的列表.通常,它们拥有更复杂的数据结构,可能包括日期.地理信息.其他对象或者数组等. 也许有一天你想把这些对象存储在数据库中.使用关系型数据库的行和列存储,这相当于是把一个表现力丰富的对象挤压到一个非常大的电子表格中:你必须将这个对象扁平化来适应表结构--通常一个字段>对应一列--而且又不得不在每次查询时重新构造对象. Elasticsearch 是 面向文档 的,意味着它存储整个对象或 文档_.Elasticsearch 不仅存储文档,而且 _索引每个文

[Elasticsearch] 分布式文档存储

本文翻译自Elasticsearch官方指南的distributed document store一章. 分布式文档存储 在上一章中,我们一直在介绍索引数据和获取数据的方法.但是我们省略了很多关于数据是如何在集群中被分布(Distributed)和获取(Fetched)的技术细节.这实际上是有意为之 - 你真的不需要了解数据在ES中是如何被分布的.它能工作就足够了. 在本章中,我们将会深入到这些内部技术细节中,来帮助你了解你的数据是如何被存储在一个分布式系统中的. 路由一份文档(Document

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

1.RESTful接口使用方法 为了方便直观我们使用Head插件提供的接口进行演示,实际上内部调用的RESTful接口. RESTful接口URL的格式: http://localhost:9200/<index>/<type>/[<id>] 其中index.type是必须提供的. id是可选的,不提供es会自动生成. index.type将信息进行分层,利于管理. index可以理解为数据库:type理解为数据表:id相当于数据库表中记录的主键,是唯一的. 2.索引文

分享一个Linux管理文档多租户的例子

例题 同一群组microsoft下的两个账号justmine001和justmine002需要共同拥有目录/microsoft/eshop的开发权,以便进行协同工作,但是其他人不允许进入和查阅该目录. 从例题可以分析出: 同一群组下的账户需要共同拥有目录的使用权,且可以编辑里面的任何文件. 其他账户不拥有该目录的任何权限. 需要使用root账户,创建账户.群组,设置目录权限,然后搭建开发环境. 创建账户相关信息 groupadd microsoft ; 新增群组 useradd -G micro

Asp.Net Core Api 使用Swagger管理文档教程的安装与使用

这周因为公司的需求需要我做一个Api的程序,这周的三天时间我一直在Core Api和 framework Api之间做纠结.不知道要使用哪一个去做项目,想着想着就决定了.既然两个我都没用过那个何不来使用Core Api来做呢.也是对自己的一种锻炼! OK,接下来回归正题! Core下的Swagger和传统framework  Mvc下的Swagger是不一样的!  两者的差距:       其一:引用的程序集不一样.          其二:安装完程序集后需要配置的地方不一样,