【问题标题】:Not clear how to upsert ElasticSearch using python elasticsearch不清楚如何使用 python elasticsearch 插入 ElasticSearch
【发布时间】:2017-07-29 02:41:23
【问题描述】:

在这里寻找一个类似的例子:

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 请求来做弹性搜索的帖子,我认为这可能是有道理的......

【问题讨论】:

  • 附加到数组是什么意思?很确定文档涵盖了ctx._source.tags+=new_tag
  • @cricket_007 elasticsearch 文档涵盖了它;不是 python elasticsearch api 文档,除非我错过了...
  • elasticsearch文档中POST <url>部分下的整个JSON块可以就是Python API的body
  • 解决方案有帮助吗?
  • 离开了 upserting 解决方案,使用 Python Elasticsearch,here

标签: python elasticsearch upsert


【解决方案1】:

您可以将script 放入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

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

【讨论】:

  • 还有一个script 参数。不知道如何添加params,虽然
  • 这是一些 url encoded 的东西,我从未使用过,但您可以使用文档中的 body 参数,body – The request definition using either script or partial doc 对我有用
  • 是的,使用身体工作。对于 url 编码的部分,它可能是这样的 stackoverflow.com/a/5607708/2308683
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 2014-05-17
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多