2013-01-02 3 views
3

J'ai répertorié un document ElasticSearch comme suit:Comment mettre à jour un document à l'aide de l'API Elasticsearch Update?

{ 
_parent: chow-demo 
_index: prototype_2013.01.02 
_type: chow-clfg 
_id: Nx4JcvyxTPujkyy0Jq5BNw 
_score: 11.600378 
_source: { 
    chow-clfg: { 
    @type: chow-clfg 
    clfg: Cg5iV00z4woYAAAARQ0 
    @timestamp: 2013-01-02T06:26:00.000Z 
    count: 1 
    } 
} 
} 

J'ai essayé de mettre à jour le champ de comptage par la commande suivante:

curl -XPOST 'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw/_update' -d '{"script":"ctx._source.chow-clfg.count+=num","params":{"num":1}}' 

Cependant j'ai reçu l'erreur suivante à la place:

{"error":"RemoteTransportException[[Vesta][inet[/10.15.78.249:9300]][update]]; nested: DocumentMissingException[[prototype_2013.01.02][0] [chow-clfg][Nx4JcvyxTPujkyy0Jq5BNw]: document missing]; ","status":404} 

Qu'est-ce que j'ai fait exactement qui manque? Je suivais les documents au http://www.elasticsearch.org/guide/reference/api/update.html et pourtant cela ne fonctionne pas.

Aussi, j'inclus le champ parent:

curl -XPOST 'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw/_update' -d '{"parent":"chow-demo","script":"ctx._source.chow-clfg.count+=num","params":{"num":1}}' 

Et il ne fonctionne toujours pas. Tout le monde peut m'aider avec cette erreur?

+0

Etes-vous sûr le document que vous essayez de mettre à jour existe-t-il? –

+0

Certainement; ça devait exister. D'une certaine manière, la documentation ne montre pas vraiment la syntaxe de la manière dont elle devrait être indexée clairement. Ou je pourrais avoir mal lu la documentation. –

+0

Essayez: 'curl -XGET 'localhost: 9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw'', quelle est la sortie? . En outre, vous utilisez 'ES 0.19 +', non? –

Répondre

3

Fondamentalement, c'était une syntaxe incorrecte qui a causé le problème de ne pas pouvoir mettre à jour.

Erreur:

curl -XPOST 'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw/_update' \ 
    -d '{"script":"ctx._source.chow-clfg.count+=num","params":{"num":1}}' 

La syntaxe correcte:

curl -XPOST 'localhost:9200/prototype_2013.01.02/chow-clfg/Nx4JcvyxTPujkyy0Jq5BNw/_update?parent=chow-demo' 
    -d '{"script":"ctx._source[\"chow-demo\"].count+=num","params":{"num":1}}' 

Le mapping parent doit être inclus, ainsi que le nom du type dans sa syntaxe:

ctx._source[\"chow-demo\"].count+=num 
+0

Comment puis-je l'implémenter en utilisant php? – Vagabond

Questions connexes