2016-11-12 2 views
0

Ich möchte ein externes Skript mit ElasticSearch's _update api aufrufen. Es scheint, als ob das Skript nie wirklich ausgeführt wird. Ein entsprechendes Inline-Skript führt die erwarteten Aktualisierungen durch.ElasticSearch _update mit Script-Datei nicht ausgeführt

Irgendwelche Ideen, warum dies der Fall sein könnte?


Das Skript sieht wie folgt aus:

scripts/update_comments.groovy

"ctx._source.comments+=new_comment" 

Meine elastische Abfrage wie folgt aussieht:

POST my_index/blog/1/_update 
{ 
    "script": { 
    "script_file": "update_comments", 
    "params": { 
     "new_comment": { 
      "name": "Jon Snow", 
      "comment": "Winter is coming" 
     } 
    } 
    } 
} 

Ausführen eines GET /my_index/blog/1 kehrt die Originaldokument, nicht das aktualisierte e. Beachten Sie, dass die _version Nummer erhöht, obwohl nichts geändert hat.

{ 
    "_index": "my_index", 
    "_type": "blog", 
    "_id": "1", 
    "_version": 2, 
    "found": true, 
    "_source": { 
    "name": "Guy", 
    "body": "This is a post", 
    "comments": [ 
     { 
     "name": "Foo bar", 
     "comment": "Great article" 
     } 
    ] 
    } 
} 

Für die Prüfung, habe ich script.groovy.sandbox.enabled: true und lief die gleiche Abfrage, nur mit einem Inline-Skript:

{ 
    "script": "ctx._source.comments+=new_comment", 
    "params": { 
    "new_comment": { 
     "name": "Jon Snow", 
     "comment": "Winter is coming" 
    } 
    } 
} 

Und bekam das erwartete Ergebnis:

{ 
    "_index": "my_index", 
    "_type": "blog", 
    "_id": "1", 
    "_version": 3, 
    "found": true, 
    "_source": { 
    "name": "Guy", 
    "body": "This is a post", 
    "comments": [ 
     { 
     "name": "Foo Bar", 
     "comment": "Great article" 
     }, 
     { 
     "name": "Jon Snow", 
     "comment": "Winter is coming" 
     } 
    ] 
    } 
} 

Antwort

0

Das Problem waren die Zitate um das Skript. Das ist, was ich zum Kopieren und Einfügen bekomme.

Also statt

"ctx._source.comments+=new_comment" 

Das Skript sollte wie folgt aussehen:

an der richtigen Stelle, sonst würde ich einen Fehler sagen, dass es nicht gefunden werden kann
ctx._source.comments+=new_comment 
0

Ihr Skript ist einfach nicht an der richtigen Stelle gespeichert.

Wie in der file script documentation, müssen Sie es in $ES_HOME/config/scripts/ oder wenn Sie sie an einem anderen Ort speichern möchten Sie die path.scripts Einstellung in elasticsearch.yml ändern müssen speichern.

+0

Es ist gerettet. Ich sehe auch in der stdout, dass das Skript geladen wurde – funseiki

+0

Dann ist dies nicht korrekt 'config/update_comments.groovy' und irreführend – Val

+0

Haben Sie' script.file: true' in Ihrer Konfiguration? – Val

Verwandte Themen