python - 不清楚如何使用 python elasticsearch 更新 ElasticSearch

标签 python elasticsearch upsert

在这里看一个类似的例子:

https://stackoverflow.com/a/33247409/1575066

from elasticsearch import Elasticsearch
es = Elasticsearch("localhost:9200")
es.update(index='test',doc_type='test1',id='1',body={'doc' {'username':'Tom'},'doc_as_upsert':True})

但现在假设目标是追加到数组或增加先前的值(无需先获取文档)。

如果您接受官方要求,这在 documentation 中:

POST /website/pageviews/1/_update
{
   "script" : "ctx._source.views+=1",
   "upsert": {
       "views": 1
   }
}

我想知道如何完成对数组的追加(只是简单地添加到默认列表)。 elasticsearch 自己的示例似乎比我能找到的任何专门针对 Python 的示例都要简单。

我之前读过一篇关于人们只是使用 python 请求来做 elasticsearch 东西的帖子,我认为它可能有一点意义......

最佳答案

您可以将您的脚本放在body参数中。

from elasticsearch import Elasticsearch

es = Elasticsearch()

es.update(
    index="test",
    doc_type="test1",
    id="1",
    body={"script": "ctx._source.tags+=new_tag",
          "params": {
             "new_tag" : "search"
            }
          }
    )

更多关于 update api

这里的 tags 是一个数组,我将 search 附加到它。您还需要为此启用脚本,或者您可以将脚本放入文件中并将该文件放入 config/scripts 文件夹中。语法可能因 ES 版本而异。如果它不起作用,请告诉我。

关于python - 不清楚如何使用 python elasticsearch 更新 ElasticSearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35046765/

相关文章:

python - 在python中将日期从数据集转换为yyyy-mm-dd

python - pip 2 和 3 语法更改

python - 仅将唯一记录导入 PostgreSQL

如果最终返回值,则不会引发 python 异常

indexing - 在 elasticsearch 中创建或更新映射

json - Node.js:从Elasticsearch查询中解析JSON对象

python - 如何使用 Python API 在 Elastic Search 中批量索引

postgresql - 如何确定 upsert 是否是 PostgreSQL 9.5+ UPSERT 的更新?

sql - 使用 'ON CONFLICT DO NOTHING' 插入触发器

python - Kivy-使对象在拖动时被复制