ElasticSearch(二):文档的基本CRUD与批量操作
ElasticSearch(二):文档的基本CRUD与批量操作
## Create 文档
支持自动生成文档_id和指定文档_id两种方式。
* 通过调用`POST index_name/_doc`,系统会自动生成文档 _id。
```
#create document. 自动生成 _id
POST users/_doc
{
"user" : "Mike",
"post_date" : "2019-04-15T14:12:12",
"message" : "trying out Kibana"
}
```
```
#返回结果
{
"_index" : "users",
"_type" : "_doc",
"_id" : "TyPHr20BkakgvNgYZu2L",#自动生成文档的_id
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
```
* 使用`PUT index_name/_create/_id`或`PUT index_name/_doc/_id?op_type=create`创建时,URI中显示指定`_create`,此时如果该_id的文档已经存在,操作会失败。
```
#1.create document. 指定 _id 如果已经存在,就报错
PUT users/_create/1
{
"user" : "Jack",
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
#2.create document. 指定_id。如果_id已经存在,报错
PUT users/_doc/1?op_type=create
{
"user" : "Jack",
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
```
```
#如果_id已经存在报错信息,如下:
{
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[1]: version conflict, document already exists (current version [1])",
"index_uuid": "ohLNyzUmTv6cm-Ih9kH0bw",
"shard": "0",
"index": "users"
}
],
"type": "version_conflict_engine_exception",
"reason": "[1]: version conflict, document already exists (current version [1])",
"index_uuid": "ohLNyzUmTv6cm-Ih9kH0bw",
"shard": "0",
"index": "users"
},
"status": 409
}
```
## Index 文档
Index和Create不一样的地方:如果文档不存在,就索引新的文档。否则现有的文档会被删除,新的文档被索引,版本信息+1。使用`PUT index_name/_doc/_id`。
```
PUT users/_doc/1
{
"user" : "Mike"
}
```
```
#返回结果
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_version" : 3, #版本增加
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 4,
"_primary_term" : 2
}
```
## Update 文档
Update方法不会删除原来的文档,而是实现真正的数据更新,更新的文档必须存在,更新的内容需要包含在`doc`中。
```
#更新文档API
POST index_name/_update/_id
{
"doc":{
"field1":"value1",
"field2":"value2"
}
}
```
#更新_id=1文档
POST users/_update/1
{
"doc":{
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
}
## Get 文档
根据文档ID,获取相应文档信息,`GET index_name/_doc/_id`
```
#Get the document by ID
GET users/_doc/1
```
```
#返回结果
{
"_index" : "users",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 2,
"_primary_term" : 1,
"found" : true,
"_source" : {
"user" : "Jack",
"post_date" : "2019-05-15T14:12:12",
"message" : "trying out Elasticsearch"
}
}
```
## Delete 文档
根据文档ID,删除相应文档信息,`DELETE index_name/_doc/_id`
```
# 删除文档
DELETE users/_doc/1
```
## 批量操作-bulk
批量操作,可以减少网络连接所产生的开销,提高性能。
* 支持在一次API调用中,对不同的索引进行操作。
* 支持四种类型操作:`Index`,`Create`,`Update`,`Delete`。
* 可以在URI中指定Index,也可以在请求中指定。
* 操作中单条操作失败,并不会影响其他操作。
* 返回结果包括了每一条操作执行的结果。
* 不要发送过多数据,一般建议是1000-5000个文档,如果你的文档很大,可以适当减少队列,大小建议是5-15MB,默认不能超过100M,会报错。
### Bulk 操作
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
#返回结果
{
"took" : 227,
"errors" : false,
"items" : [
{
"index" : {
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1,
"status" : 201
}
},
{
"delete" : {
"_index" : "test",
"_type" : "_doc",
"_id" : "2",
"_version" : 1,
"result" : "not_found",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1,
"status" : 404
}
},
{
"create" : {
"_index" : "test2",
"_type" : "_doc",
"_id" : "3",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1,
"status" : 201
}
},
{
"update" : {
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1,
"status" : 200
}
}
]
}
## 批量读取-mget
mget 是通过文档`_id`列表得到文档信息。
```
### mget 操作
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_id" : "1"
},
{
"_index" : "test",
"_id" : "2"
}
]
}
URI中指定index
GET /test/_mget
{
"docs" : [
{
"_id" : "1"
},
{
"_id" : "2"
}
]
}
GET /_mget
{
"docs" : [
{
"_index" : "test",
"_id" : "1",
"_source" : false
},
{
"_index" : "test",
"_id" : "2",
"_source" : ["field3", "field4"]
},
{
"_index" : "test",
"_id" : "3",
"_source" : {
"include": ["user"],
"exclude": ["user.location"]
}
}
]
}
返回结果
{
"docs" : [
{
"_index" : "test",
"_type" : "_doc",
"_id" : "1",
"_version" : 4,
"_seq_no" : 5,
"_primary_term" : 1,
"found" : true,
"_source" : {
"field1" : "value1",
"field2" : "value2"
}
},
{
"_index" : "test",
"_type" : "_doc",
"_id" : "2",
"found" : false
}
]
}
<br/>
## 批量查询-msearch
msearch 是根据查询条件,搜索到相应文档。
POST kibana_sample_data_ecommerce/_msearch
{}
{"query" : {"match_all" : {}},"size":1}
{"index" : "kibana_sample_data_flights"}
{"query" : {"match_all" : {}},"size":2}
<br/>
## 常见错误返回说明
问题|原因
---|:--
无法连接|网络故障或集群挂了
连接无法关闭|网络故障或节点出错
429|集群过于繁忙
4xx|请求体格式有错
500|集群内部错误
ElasticSearch(二):文档的基本CRUD与批量操作的更多相关文章
- ElasticSearch——原始文档和倒排索引
一.原始文档 如上图所示, 第二象限是一份原始文档,有title和content2个字段,字段取值分别为”我是中国人”和” 热爱共X产党”,这一点没什么可解释的.我们把原始文档写入Elasticsea ...
- 007-elasticsearch5.4.3【一】概述、Elasticsearch 访问方式、Elasticsearch 面向文档、常用概念
一.概述 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上. Elasticsearch 也是使用 Java 编写的,它的内部使用 L ...
- elasticsearch父子文档处理(join)
elasticsearch父子文档处理 join 一.背景 二.需求 三.前置知识 四.实现步骤 1.创建 mapping 2.添加父文档数据 3.添加子文档 4.查询文档 1.根据父文档id查询它下 ...
- elasticsearch 路由文档到分片
路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是 ...
- ElasticSearch部署文档(Ubuntu 14.04)
ElasticSearch部署文档(Ubuntu 14.04) 参考链接 https://www.elastic.co/guide/en/elasticsearch/guide/current/hea ...
- Elasticsearch 删除文档
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- Elasticsearch 更新文档
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- .Net Api 之如何使用Elasticsearch存储文档
.Net Api 之如何使用Elasticsearch存储文档 什么是Elasticsearch? Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据 ...
- ElasticSearch基础+文档CRUD操作
本篇博客是上一篇的延续,主要用来将年前学习ES的知识点做一个回顾,方便日后进行复习和汇总!因为近期项目中使用ES出现了点小问题,因此在这里做一个详细的汇总! [01]全文检索和Lucene (1)全文 ...
随机推荐
- C# 8 - Range 和 Index(范围和索引)
C# 7 的 Span C# 7 里面出现了Span这个数据类型,它可以表示另一个数据结构里连续相邻的一串数据,并且它是内存安全的. 例子: 这个图的输出是3,4,5,6. C# 8 的Range类型 ...
- 【故障公告】docker swarm 集群问题引发的故障
我们的生产环境部署了 2 个 docker swarm 集群,集群 swarm-a 用于专门跑博客站点,集群 swarm-b 用于跑其他站点,manager 节点用了阿里云包月服务器,worker 节 ...
- node 利用命令行交互生成相应模板
目录 readline 实现 使用process实现 使用 inquirer 调用的生成模板方法 (generator 方法) 创建时间:2019-10-15 测试环境:win10 node-v10. ...
- requests模块(代理)篇
- 用户验证 - 代理验证 #可能需要使用HTTP basic Auth, 可以这样 # 格式为 用户名:密码@代理地址:端口地址 proxy = { "http": " ...
- java猜数游戏
java随机数的产生 int number=(int)(Math.random()*10+1) Math.random()*n //n个随机数,从0开始 do{}while循环 //猜数,1到10的随 ...
- web安全之点击劫持
点击劫持(ClickJacking)是一种视觉上的欺骗手段.大概有两种方式, 一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明 ...
- PHP pa和ma
<?php class Mouse { private $color; public $sex; public function __construct($role){ switch($role ...
- Go 零基础 30 min 入门
不知不觉用 Go 开发也两年多了. 筹备点经验汇总, 方便后面的同学能快速上手. 提纲 1. Go 安装 2. Go ide 搭建 3. Go modules 模块管 ...
- linux-32位-交叉编译openssl
下载 openssl-1.1.0i.tar.gz ./config no-asm shared –prefix=/usr/local/openssl –cross-compile-prefix=arm ...
- MFC::使用mysql
下载mysql-installer-community-5.7.16.0.msi,安装 mysql server即可. 创建工程包含头文件 #include "winsock.h" ...