❤️ 个人主页:水滴技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏:大数据核心技术从入门到精通
文章目录
大家好,我是水滴~~
本篇文章主要介绍 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"}
映射字段
创建索引时,可以映射字段。
请求:
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
操作,分配的文档ID
WETPnoUBbyDvl79vwHTp
,版本号为
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 教程:从入门到精通》
👍 《大数据核心技术从入门到精通》
版权归原作者 水滴技术 所有, 如有侵权,请联系我们删除。