本文来说下Elasticsearch基本操作之文档操作
文章目录
文档概述
文档概述
- 在创建好索引的基础上来创建文档,并添加数据。
- 这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式。
创建文档示例
创建文档(生成随机id)
在 apifox 中,向 ES 服务器发 POST 请求 :http://localhost:9200/person/_doc,请求体内容为:
服务器响应结果如下:
此处发送请求的方式 必须为 POST,不能是 PUT ,否则会发生错误
服务器响应结果解释
xml
{
"_index"【索引】: "person",
"_type"【 类型-文档 】: "_doc",
"_id"【唯一标识】: "Qc8r54wBBLem2BEmnNus",
#可以类比为 MySQL 中的主键,随机生成
"_version"【版本】: 1,
"result"【结果】: "created",#这里的 create 表示创建成功
"_shards"【分片】: {
"total"【分片 - 总数】: 2,
"successful"【分片 - 成功】: 1,
"failed"【分片 - 失败】: 0
},
"_seq_no": 1,
"_primary_term": 1
}
- 注意:上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机生成一个。
创建文档(自定义唯一性标识)
在 apifox 中,向 ES 服务器发 POST 请求 :http://localhost:9200/person/_doc/1,请求体内容为:
xml
{
"name":"李四",
"age":22,
"sex":"女"
}
服务器响应结果如下:
查看文档示例
根据主键查看文档
查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询。在 apifox 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/person/_doc/ 1
查询成功后,服务器响应结果
服务器响应结果解释
xml
{
"_index"【索引】: "person",
"_type"【文档类型】: "_doc",
"_id"【唯一标识】: "1", #可以类比为 MySQL 中的主键
"_version"【版本】: 1,
"_seq_no": 4,
"_primary_term": 1,
"found"【查询结果】: true, # true 表示查找到,false 表示未查找到
"_source"【文档源信息】: {
"name": "李四",
"age": 22,
"sex": "女"
}
}
查看所有文档
在 apifox 中,向 ES 服务器发 GET 请求 :http://localhost:9200/person/ _search
查询成功后,服务器响应结果
xml
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 5,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "person",
"_type": "_doc",
"_id": "QM_K5owBBLem2BEmAdux",
"_score": 1.0,
"_source": {
"name": "张三",
"age": 20,
"sex": "男"
}
},
{
"_index": "person",
"_type": "_doc",
"_id": "Qc8r54wBBLem2BEmnNus",
"_score": 1.0,
"_source": {
"name": "张三",
"age": 20,
"sex": "男"
}
},
{
"_index": "person",
"_type": "_doc",
"_id": "Qs9754wBBLem2BEm69tA",
"_score": 1.0,
"_source": {
"name": "张三",
"age": 20,
"sex": "男"
}
},
{
"_index": "person",
"_type": "_doc",
"_id": "Q89854wBBLem2BEmXds5",
"_score": 1.0,
"_source": {
"name": "李四",
"age": 22,
"sex": "女"
}
},
{
"_index": "person",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"name": "李四",
"age": 22,
"sex": "女"
}
}
]
}
}
修改文档示例
全局修改文档
和新增文档一样,输入相同的 URL 地址请求,如果请求体变化,会将原有的数据内容覆盖。在 apifox 中,向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/person/_doc/1,请求体内容为:
xml
{
"name":"李四四",
"age":66,
"sex":"女"
}
修改成功后,服务器响应结果
服务器响应结果解释
xml
{
"_index": "person",
"_type": "_doc",
"_id": "1",
"_version"【版本】: 2,
"result"【结果】: "updated",# updated 表示数据被更新
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 1
}
局部修改文档
修改数据时,也可以只修改某一给条数据的局部信息。在 apifox 中,向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/person/_update/1,请求体内容为:
修改成功后,服务器响应结果
根据唯一性标识,查询文档数据,文档数据已经更新
删除文档示例
根据文档的唯一性标识删除文档
- 删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。
在 apifox 中,向 ES 服务器发 DELETE 请求 :http://127.0.0.1:9200/person/ _doc/1
删除成功,服务器响应结果
服务器响应结果解释
xml
{
"_index": "person",
"_type": "_doc",
"_id": "1",
"_version"【版本】: 4, #对数据的操作,都会更新版本
"result"【结果】: "deleted", # deleted 表示数据被标记为删除
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 7,
"_primary_term": 1
}
删除后再查询当前文档信息
如果删除一个并不存在的文档,返回结果为 not_found
条件删除文档
一般删除数据都是根据文档的唯一性标识进行删除,实际操作时,也可以根据条件对多条数据进行删除。
- 首先分别增加多条数据
向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/person/ _delete_by_query ,请求体内容为:
xml
{
"query":{
"match":{
"name":"张三"
}
}
}
服务器响应结果解释
xml
{
"took"【耗时】: 1426,
"timed_out" 【是否超时】: false,
"total" 【总数】: 4,
"deleted"【删除数量】: 4,
"batches": 1,
"version_conflicts": 0,
"noops": 0,
"retries": {
"bulk": 0,
"search": 0
},
"throttled_millis": 0,
"requests_per_second": -1.0,
"throttled_until_millis": 0,
"failures": []
}
本文小结
本文记录了Elasticsearch基本操作之文档操作