如何使用 python 编辑保存在 Elasticsearch 中的文档
Posted
技术标签:
【中文标题】如何使用 python 编辑保存在 Elasticsearch 中的文档【英文标题】:How to Edit document saved in Elasticsearch using python 【发布时间】:2021-05-21 03:33:34 【问题描述】:我是 elasticsearch
的新手,我正在尝试使用 python 执行 CRUD 操作。我创建了一个索引,并且可以将文档保存在 Elasticsearch 中。但是,当我尝试更新文档时,整个数据都会被覆盖。例如,创建文档时有 3 个字段:
data =
"typeId":"someValue",
"typeStatus":"someValue",
"typeLists":"someValue",
"createdDate","someValue"
在保存文档时会保存上述内容。在编辑上述文档时,createdDate 被删除。以下是更新文档。
data =
"typeId":"someValue",
"typeStatus":"someValueEdited",
"typeLists":"someValue",
"updatedDate","someValue"
有没有办法在不丢失字段的情况下保存/编辑文档?下面是代码。
import urllib3
saveContext = '_doc'
updateContext = '_update'
httpClient = urllib3.PoolManager()
response = httpClient.request('PUT',
elasticsearchURL,
headers='headersValue',
body=json.dumps(items))
上下文值附加到 ES URL。
【问题讨论】:
你能在elasticsearchURL
变量中显示你有什么吗?
elasticsearchURL = elasticsearch + saveContext
【参考方案1】:
是的,您可以通过不同的 URL 实现您想要的。
您可以像现在一样创建文档,方法是点击following endpoint
PUT index/_doc/<id>
"typeId": "someValue",
"typeStatus": "someValue",
"typeLists": "someValue",
"createdDate": "someValue"
然后,当您想要部分更新您的文档时,您需要打一个稍微different endpoint(与正文略有不同),即
POST index/_doc/<id>/_update
"doc" :
"typeId": "someValue",
"typeStatus": "someValueEdited",
"typeLists": "someValue",
"updatedDate": "someValue"
那么最终结果将是:
"typeId": "someValue",
"typeStatus": "someValueEdited",
"typeLists": "someValue",
"createdDate": "someValue",
"updatedDate": "someValue"
还要注意,更新文档时,不需要传递值没有改变的字段(即typeId
和typeLists
)
【讨论】:
网址如您所建议,但我收到以下错误。b'"error":"root_cause":["type":"x_content_parse_exception","reason":"[1:2] [UpdateRequest] unknown field [typeId]"],"type":"x_content_parse_exception","reason":"[1:2] [UpdateRequest] unknown field [typeId]","status":400'
您是否确保将所有内容都包装在 "doc": ...
结构中?以上是关于如何使用 python 编辑保存在 Elasticsearch 中的文档的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Terraform 为 Elastic Beanstalk 中的 EC2 实例设置 EBS 根卷以持久保存
如何在 AWS elastic-beanstalk 中更改我的 python 版本
我正在尝试使用 AWS EB CLI (elastic beanstalk) 部署 python 应用程序
如何通过 virtualenv 在 Amazon 的 Elastic Beanstalk 上使用最新版本的 python (3.6)