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

You can't use the update query with both doc and script params. You can do all the stuff in the script field using the params field in it.

You may find more information in this post:

Elastic Search Partial Update

于 2016-03-14T08:59:05.173 に答える