2016-03-12 2 views
0

Quelle est la manière la plus élégante d'insérer un nouveau document (s'il n'existe pas déjà) ou de mettre à jour (augmenter le compteur de 1) d'un document déjà existant?Comment insérer un nouveau document ou mettre à jour un ancien document en utilisant elasticsearch-py?

Celui-ci:

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 
        } 
     } 
    ) 

auges l'erreur suivante:

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

Répondre

0

Vous ne pouvez pas utiliser la requête de mise à jour à la fois et doc params script. Vous pouvez faire toutes les choses dans le champ script en utilisant le champ params.

Vous pouvez trouver plus d'informations dans ce post:

Elastic Search Partial Update

0

Vous pouvez inclure dans le champ "doc" corps à jour.

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