本文来说下Elasticsearch基本操作之文档操作
文章目录
- 文档概述
- 创建文档示例
- 创建文档(生成随机id)
- 创建文档(自定义唯一性标识)
- 查看文档示例
- 根据主键查看文档
- 查看所有文档
- 修改文档示例
- 全局修改文档
- 局部修改文档
- 删除文档示例
- 根据文档的唯一性标识删除文档
- 条件删除文档
- 本文小结
文档概述
文档概述
- 在创建好索引的基础上来创建文档,并添加数据。
- 这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式。
创建文档示例
创建文档(生成随机id)
在 apifox 中,向 ES 服务器发 POST 请求 :http://localhost:9200/person/_doc,请求体内容为:
服务器响应结果如下:
此处发送请求的方式 必须为 POST,不能是 PUT ,否则会发生错误
服务器响应结果解释
{"_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,请求体内容为:
{"name":"李四","age":22,"sex":"女"
}
服务器响应结果如下:
查看文档示例
根据主键查看文档
查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询。在 apifox 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/person/_doc/ 1
查询成功后,服务器响应结果
服务器响应结果解释
{"_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
查询成功后,服务器响应结果
{"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,请求体内容为:
{"name":"李四四","age":66,"sex":"女"
}
修改成功后,服务器响应结果
服务器响应结果解释
{"_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
删除成功,服务器响应结果
服务器响应结果解释
{"_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 ,请求体内容为:
{"query":{"match":{"name":"张三"}}
}
服务器响应结果解释
{"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基本操作之文档操作