3

插入新文档(如果尚不存在)或更新(将计数器增加 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;")
4

2 回答 2

1

您可以"doc"在正文中包含要更新的字段。

es = Elasticsearch()
doc = NewsSerializer(news).data
es.update(index="news_index", doc_type='news', id=1, body={"doc": doc})
于 2016-08-11T00:05:35.283 回答
0

您不能将更新查询与 doc 和 script 参数一起使用。您可以使用其中的script字段来完成该params字段中的所有内容。

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

弹性搜索部分更新

于 2016-03-14T08:59:05.173 回答