如何使用elasticsearch-py插入新文档或更新旧文档?

时间:2016-03-12 14:30:08

标签: elasticsearch elasticsearch-py

在已存在的文档中插入新文档(如果尚未存在)或更新(增加计数器1)的最优雅方式是什么?

这一个:

res = elasticsearch.update(
        index='stories-test',
        doc_type='news',
        id=1,
        body={
            "doc":
                {
                    "author": "me",
                    "visits": 1
                },
                'doc_as_upsert': True
        },
        script={
                    "inline": "ctx._source.visits += visit",
                    "params": {
                        "visit": 1
                    }
        }
    )

遇到以下错误:

RequestError: TransportError(400, u'action_request_validation_exception', u"Validation Failed: 1: can't provide both script and doc;")

2 个答案:

答案 0 :(得分:1)

您可以在正文中加入"doc"字段进行更新。

es = Elasticsearch()
doc = NewsSerializer(news).data
es.update(index="news_index", doc_type='news', id=1, body={"doc": doc})

答案 1 :(得分:0)

您无法在doc和script params中使用更新查询。您可以使用其中的script字段在params字段中执行所有操作。

您可以在这篇文章中找到更多信息:

Elastic Search Partial Update