❤️ 个人主页:水滴技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏:大数据核心技术从入门到精通
文章目录
- 一、索引管理
- 1. 创建索引
- 创建一个索引
- 索引设置
- 映射字段
- 别名
- 2. 获取索引
- 3. 删除索引
- 4. 判断索引是否存在
- 二、映射管理
- 1. 获取映射
- 2. 添加映射字段
- 三、文档管理
- 1. 创建文档
- `POST /<target>/_doc/`
- `POST /<target>/_create/<_id>`
- `PUT /<target>/_create/<_id>`
- `PUT /<target>/_doc/<_id>`
- 2. 修改文档
- 更新文档字段值
- 添加文档字段
- 删除文档字段
- 3. 获取文档
- `GET <index>/_doc/<_id>`
- `GET <index>/_source/<_id>`
- 4. 判断文档是否存在
- 5. 删除文档
- 四、总结
- 系列文章
- 热门专栏
大家好,我是水滴~~
本篇文章主要介绍 Elasticsearch 关于索引、映射和文档的管理。每个请求都会有配套示例,可以当成工具书查看。
一、索引管理
1. 创建索引
创建一个索引,使用的请求为 PUT /<index>
,其中 <index>
为索引名称。同时,还可以指定如下内容:索引的设置 settings
、索引中字段的映射 mappings
、索引的别名 aliases
。
下面通过一些示例来演示如何创建索引:
创建一个索引
请求:
PUT /my-index-000001
响应:
{"acknowledged" : true,"shards_acknowledged" : true,"index" : "my-index-000001"
}
其中 acknowledged
表示在超时之前,集群中是否成功创建了索引;而 shards_acknowledged
表示在超时之前,索引中的每个分区是否启动了所需数据的分区副本。
索引设置
创建索引时,可以对更改索引设置。
请求:
PUT /my-index-000002
{"settings": {"index": {"number_of_shards": 3, "number_of_replicas": 2 }}
}
number_of_shards
为该索引的分区数,默认值为1;number_of_replicas
为所有主分区的副本数,默认值为1。
可以简写:
PUT /my-index-000002
{"settings": {"number_of_shards": 3,"number_of_replicas": 2}
}
响应:
{"acknowledged" : true,"shards_acknowledged" : true,"index" : "my-index-000002"
}
更多索引设置,请访问:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/index-modules.html#index-modules-settings
映射字段
创建索引时,可以映射字段。
请求:
PUT /my-index-000003
{"mappings": {"properties": {"field1": {"type": "boolean"},"field2": {"type": "text"}}}
}
响应:
{"acknowledged" : true,"shards_acknowledged" : true,"index" : "my-index-000003"
}
别名
创建索引时,还可以为该索引设置别名,并且可以添加多个别名。
请求:
PUT /my-index-000004
{"aliases": {"alias_1": {}}
}
响应:
{"acknowledged" : true,"shards_acknowledged" : true,"index" : "my-index-000004"
}
2. 获取索引
获取一个索引,可以使用 GET /<target>
请求,其中 <target>
为索引名称。
请求:
GET /my-index-000003
响应:
{"my-index-000003" : {"aliases" : { },"mappings" : {"properties" : {"field1" : {"type" : "boolean"},"field2" : {"type" : "text"}}},"settings" : {"index" : {"routing" : {"allocation" : {"include" : {"_tier_preference" : "data_content"}}},"number_of_shards" : "1","provided_name" : "my-index-000003","creation_date" : "1672816886070","number_of_replicas" : "1","uuid" : "J50MtHoeTa-2T6ugNxIQ7Q","version" : {"created" : "7120199"}}}}
}
3. 删除索引
删除索引同时也会删除其文档、分区和元数据。可以使用 DELETE /<index>
请求,其中 <index>
为索引名称。
请求:
DELETE /my-index-000004
响应:
{"acknowledged" : true
}
4. 判断索引是否存在
可以使用 HEAD <target>
请求来检查索引是否存在,其中 <target>
为索引名或别名。
请求:
HEAD /my-index-000003
存在 - 响应:
200 - OK
不存在 - 响应:
{"statusCode":404,"error":"Not Found","message":"404 - Not Found"}
二、映射管理
1. 获取映射
可能通过 GET /<target>/_mapping
请求来查询一个索引的映射,其中 <target>
为索引名称。
请求:
GET /my-index-000003/_mapping
响应:
{"my-index-000003" : {"mappings" : {"properties" : {"field1" : {"type" : "boolean"},"field2" : {"type" : "text"}}}}
}
如果索引没有添加映射字段,结果中的 mappings
后面为空。
2. 添加映射字段
我们知道,创建索引时可以添加映射字段,如果创建完索引再添加别的索引,可以使用PUT /<target>/_mapping
命令,其中 <target>
为索引名称。
请求:
PUT /my-index-000003/_mapping
{"properties": {"field3": {"type": "keyword"},"field4": {"type": "text"}}
}
响应:
{"acknowledged" : true
}
三、文档管理
1. 创建文档
创建文档有多种方式:
POST /<target>/_doc/
通过该请求可以创建一个文档,文档ID由 Elasticsearch 自动分配。其中 <target>
为索引名称
请求:
POST /my-index-000003/_doc
{"field1": true,"field2": "第一个","field3": "1","field4": "第一个field4"
}
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "WETPnoUBbyDvl79vwHTp","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 8,"_primary_term" : 1
}
通过响应结果可以看出,该结果为
created
操作,分配的文档IDWETPnoUBbyDvl79vwHTp
,版本号为1
POST /<target>/_create/<_id>
如果想要指定文档ID,可以使用该请求,其中<target>
为索引名称,<_id>
为指定的文档ID。注:如果文档 ID 已存在,则执行失败。
请求:
POST /my-index-000003/_create/2
{"field1": true,"field2": "第二个","field3": "2","field4": "第二个field4"
}
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "2","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 9,"_primary_term" : 1
}
PUT /<target>/_create/<_id>
也可以使用该 PUT
方法来创建文档,效果与 POST /<target>/_create/<_id>
一样。
请求:
PUT /my-index-000003/_create/3
{"field1": false,"field2": "第三个","field3": "3","field4": "第三个field4"
}
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "3","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 10,"_primary_term" : 1
}
PUT /<target>/_doc/<_id>
该方式可以指定文档ID,其中<target>
为索引名称,<_id>
为指定的文档ID
请求:
PUT /my-index-000003/_doc/4
{"field1": false,"field2": "第四个","field3": "4","field4": "第四个field4"
}
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "4","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 11,"_primary_term" : 1
}
如果检测到该文档ID已存在,会覆盖原内容,并且版本
+1
请求:
PUT /my-index-000003/_doc/4
{"field1": false,"field2": "第四个_2","field3": "4","field4": "第四个field4_2"
}
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "4","_version" : 2,"result" : "updated","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 12,"_primary_term" : 1
}
从响应结果可以看出是updated
操作,并且版本升级到了2
2. 修改文档
修改文档可以使用POST /<index>/_update/<_id>
方法,该修改可以指定字段进行局部更新。
POST /<index>/_update/<_id>
更新文档字段值
可以局部更新指定字段的值。注意:更新的字段需要在doc
对象下。
请求:
POST /my-index-000003/_update/4
{"doc": {"field2": "第四个_4","field4": "第四个field4_4"}
}
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "4","_version" : 4,"result" : "updated","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 14,"_primary_term" : 1
}
添加文档字段
为该文档添加一个新的字段,并指定字段值。
请求:
POST /my-index-000003/_update/4
{"script": "ctx._source.new_field = 'new_field_value'"
}
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "4","_version" : 12,"result" : "updated","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 22,"_primary_term" : 1
}
删除文档字段
为该文档删除一个指定字段。
请求:
POST /my-index-000003/_update/4
{"script": "ctx._source.remove('new_field_value')"
}
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "4","_version" : 13,"result" : "updated","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 23,"_primary_term" : 1
}
3. 获取文档
获取文档有两种方式
GET <index>/_doc/<_id>
该方法获取文档的详细数据信息
请求:
GET /my-index-000003/_doc/4
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "4","_version" : 13,"_seq_no" : 23,"_primary_term" : 1,"found" : true,"_source" : {"field1" : false,"field2" : "第四个_2","field3" : "4","field4" : "第四个field4_2","new_field" : "new_field_value"}
}
GET <index>/_source/<_id>
该方法只获取文档字段数据信息
请求:
GET /my-index-000003/_source/4
响应:
{"field1" : false,"field2" : "第四个_2","field3" : "4","field4" : "第四个field4_2","new_field" : "new_field_value"
}
4. 判断文档是否存在
判断文档是否存在有两个方式,他们的效果是一样的
HEAD <index>/_doc/<_id>
HEAD <index>/_source/<_id>
请求:
HEAD /my-index-000003/_doc/4
响应(存在):
200 - OK
请求:
HEAD /my-index-000003/_source/5
响应(不存在):
{"statusCode":404,"error":"Not Found","message":"404 - Not Found"}
5. 删除文档
可以使用 DELETE /<index>/_doc/<_id>
方法来删除指定文档。删除会将该文档标记为已删除,并且版本号+1
。
请求:
DELETE /my-index-000003/_doc/3
响应:
{"_index" : "my-index-000003","_type" : "_doc","_id" : "3","_version" : 2,"result" : "deleted","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 26,"_primary_term" : 1
}
四、总结
PUT /<index>
创建索引GET /<target>
获取索引DELETE /<index>
删除索引HEAD <target>
判断索引是否存在GET /<target>/_mapping
获取映射PUT /<target>/_mapping
修改映射字段POST /<target>/_doc/
创建文档POST /<target>/_create/<_id>
创建文档PUT /<target>/_create/<_id>
创建文档PUT /<target>/_doc/<_id>
创建/覆盖文档POST /<index>/_update/<_id>
更新文档GET <index>/_doc/<_id>
获取文档GET <index>/_source/<_id>
获取文档HEAD <index>/_doc/<_id>
判断文档是否存在HEAD <index>/_source/<_id>
判断文档是否存在DELETE /<index>/_doc/<_id>
删除文档
系列文章
🔥 Elasticsearch 核心技术(一):Elasticsearch 安装、配置、运行(Windows 版)
🔥 Elasticsearch 核心技术(二):elasticsearch-head 插件安装和使用
🔥 Elasticsearch 核心技术(三):Kibana 安装、配置、运行(Windows 版)
热门专栏
👍 《Python入门核心技术》
👍 《IDEA 教程:从入门到精通》
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》
👍 《大数据核心技术从入门到精通》