如何使用 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"

还要注意,更新文档时,不需要传递值没有改变的字段(即typeIdtypeLists

【讨论】:

网址如您所建议,但我收到以下错误。 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 中的文档的主要内容,如果未能解决你的问题,请参考以下文章

创建 Python 按钮保存编辑的文件

如何使用 Terraform 为 Elastic Beanstalk 中的 EC2 实例设置 EBS 根卷以持久保存

如何在 AWS elastic-beanstalk 中更改我的 python 版本

如何创建一个py文件

我正在尝试使用 AWS EB CLI (elastic beanstalk) 部署 python 应用程序

如何通过 virtualenv 在 Amazon 的 Elastic Beanstalk 上使用最新版本的 python (3.6)