ElasticSearch-深入理解系列6 -文档操作

1 索引一个文档(插入数据到ES中)
1.1 使用自己的id
PUT /{index}/{type}/{id} {
"field" : "value" ,
... }
1.2 使自增ID。
POST /website/blog/ {
"title" : "My second blog entry" , "
text" : "Still trying this out..." ,
"date" : "2014/01/01"
}
自动生成的ID有22个字符,使用的UUIDs
注:有id使用的PUT,没有时使用POST
2 检索文档:
2.1 一种是简单的通过 /{index}/{type}/{id}直接查询刚才插入的,另一种是通过DSL查询语言进行搜索。
2.2 使用_mget同时根据/{index}/{type}/{id}检索出多个文档。 或者检索出指定字段,可用_source
GET /_mget {
"docs" : [ {
"_index" : "_type" : "_id" :
"_index" : "_type" : "_id" : "_source" :
"website" , "blog" ,
2
"website" , "pageviews" , 1 ,
"views"
}, {
} ]
}

3 更新文档:
文档更新分为更新整个文档和局部更新。
3.1 更新整个文档:因为ES中的文档是不可变的,使用下面的方法。会将之前插入的数据整个替换。
POST /website/blog/123 {
"title" : "new My second blog entry" , "
text" : "Still trying this out..." ,
"date" : "2014/01/01"
}
此时ES的返回的_version会+1,同时created为false。

3.2 局部更新。
a)更新方法(包含更新字段值、新增字段):
/ website /blog/123/_update
{"doc":{"name":"mack"}}
该方法会更新 / website /blog/123 文档,若没有name自动,则会新增一个字段,若有name则会更新name。

b)实际上:对于ES更新包含以下步骤
1)检索出旧文档JSON
2)修改它
3)删除旧文档
4)索引新文档
与更新整个文档不同的是,这个过程只需要客户发送一个请求。
c)更新不存在的文档,使用upsert参数。
POST /website/pageviews/1/_update {
"script" : "ctx._source.views+=1",
"upsert": {"views": 1 }
4 删除文档
删除文档和创建类似。只是使用的DELETE的方法:
DELETE /website/blog/123。

5 更新冲突问题。
比如有两个进程处理订单。
在数据库中通过悲观并发控制(Pessimistic concurrency control)和乐观并发控制 Optimistic concurrency control

悲观并发控制:关系型数据库中使用,为了解决冲突,在读取的时候就锁定该行数据,并确保只有枷锁的线上可以修改该行数据。
乐观并发控制:ES中使用。假设冲突不经常发生,
ES通过_version来控制所有修改都被正确排序。
除了使用_version来控制版本外,也可以使用外部版本控制系统。即外部版本号,比如在使用数据库作为主库,而ES只是作为搜索数据,主库有类似timestamp可以用于版本控制的字段。在查询字段后面添加version_type=external来使用这些版本号。
比如: 现 们 这 version 10
PUT /website/blog/ 2 ?version= 10 &version_type=external {
"title" : "My first external blog entry" ,
"text" : "This is a piece of cake..." }

6 使用bulk同时批量操作文档:创建、删除、更新。
6.1)语法: action: { metadata }}\n
{ request body }\n
{ action: { metadata }}\n
{ request body }\n
......
a)删除
{ "delete" : { "_index" : "website" , "_type" : "blog" , "_id" : "123" }}
b)创建:
{ "create" : { "_index" : "website" , "_type" : "blog" , "_id" : "123" }} { "title" : "My first blog post" }
c)更新:

d)上述请求放在一起:
请求结果会将每个处理结果放在一起返回.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
spring-data-elasticsearch官方教程文档提供了关于如何使用spring-data-elasticsearch框架进行Elasticsearch数据库操作的详细指导。该文档分为几个部分,包括介绍、快速入门、基本概念、查询构造器和复杂查询等。 文档的介绍部分简要介绍了spring-data-elasticsearch框架以及它提供的主要功能。快速入门部分通过一个简单的示例演示了如何配置spring-data-elasticsearch并进行基本的CRUD操作。该示例涵盖了创建索引、映射实体类、保存数据、查询数据以及删除数据。通过这个示例,读者可以迅速了解到spring-data-elasticsearch的基本用法。 基本概念部分详细介绍了spring-data-elasticsearch中的一些重要概念,包括实体类映射、索引操作文档操作、字段映射、分页和排序等。这些概念对于深入理解spring-data-elasticsearch的使用非常重要。 查询构造器部分介绍了spring-data-elasticsearch提供的查询构造器的使用方法。该部分通过实例演示了如何使用查询构造器进行基本查询、范围查询、模糊查询以及布尔查询等。读者可以通过这些示例快速掌握查询构造器的使用。 最后一部分是关于复杂查询的介绍。这一部分介绍了如何使用原生查询、使用注解进行查询以及使用自定义实现进行查询等。复杂查询是spring-data-elasticsearch一个非常重要的特性,通过它可以实现更加灵活和高级的查询功能。 总体来说,spring-data-elasticsearch官方教程文档提供了丰富的实例和详细的说明,对于想要学习和使用spring-data-elasticsearch框架的开发者来说,是一份非常有价值的指南。读者可以通过该文档逐步了解spring-data-elasticsearch的相关概念和基本用法,并通过实例演示快速上手。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值