本文将介绍 Elasticsearch 的文档基础操作,包括创建、读取、更新和删除文档。
创建文档
在 Elasticsearch 中创建文档非常简单。只需指定文档的索引、类型和 ID,以及文档的内容,即可将文档存储到 Elasticsearch 中。
下面是一个创建文档的示例。假设要在名为 people 的索引中创建一个名为 Alice 的文档,其中包含两个字段 name 和 age。
from elasticsearch import Elasticsearch
es = Elasticsearch()
doc = {
"name": "Alice",
"age": 20
}
es.create(index="people", id=1, body=doc)
在上面的代码中,index 参数指定了文档所在的索引,id 参数指定了文档的 ID,body 参数指定了文档的内容。
注意,如果指定的索引不存在,Elasticsearch 会自动创建它。如果文档 ID 已经存在,则会返回一个异常。
读取文档
读取文档也非常简单。只需指定文档的索引、类型和 ID,即可从 Elasticsearch 中读取文档的内容。
下面是一个读取文档的示例。假设之前创建了一个 id 为 1 的文档,它的 name 字段值为 Alice,age 字段值为 20。
from elasticsearch import Elasticsearch
es = Elasticsearch()
doc = es.get(index="people", id=1)
print(doc['_source'])
在上面的代码中,index 参数指定了文档所在的索引,id 参数指定了文档的 ID。调用 get 方法可以从 Elasticsearch 中读取文档的内容,返回结果是一个包含文档内容的 JSON 对象。通过访问 _source 字段,可以获取文档的具体内容。
注意,如果指定的索引、类型或 ID 不存在,则会返回一个异常。
更新文档
除了创建文档,还可以更新已有文档。Elasticsearch 提供了一种简单的方式,即使用 update API。
下面是一个更新文档的示例。假设之前创建了一个 id 为 1 的文档,它的 name 字段值为 Alice,age 字段值为 20。
from elasticsearch import Elasticsearch
es = Elasticsearch()
doc = {
"doc": {
"name": "Bob",
"age": 25
}
}
es.update(index="people", id=1, body=doc)
此时,文档的 name 字段被更新为 Bob,age 字段被更新为 25。
删除文档
接下来,我们将介绍如何删除文档。删除文档可以使用 DELETE 请求。以下是一个示例:
response = es.delete(index="my-index", id=1)
print(response)
这将从名为 my-index 的索引中删除 ID 为 1 的文档。如果成功删除文档,将返回一个包含以下信息的 JSON 响应:
{
"_index": "my-index",
"_type": "_doc",
"_id": "1",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
如果文档不存在,将返回以下 JSON 响应:
{
"error": {
"root_cause": [
{
"type": "index_not_found_exception",
"reason": "no such index [my-index]",
"index_uuid": "_na_",
"resource.type": "index_or_alias",
"resource.id": "my-index",
"index": "my-index"
}
],
"type": "index_not_found_exception",
"reason": "no such index [my-index]",
"index_uuid": "_na_",
"resource.type": "index_or_alias",
"resource.id": "my-index",
"index": "my-index"
},
"status": 404
}
现在,我们已经了解了如何向索引添加、获取和删除文档。