2016-05-12 7 views
0

Ich möchte ein Update-by-Abfrage durchführen, speziell ein bestimmtes Dokument aktualisieren, wo Feldname, der Gary enthält. Ich benutze die neueste Version von elasticsearch (2.3) Ich verwende den offiziellen ES-Client für nodejs. Eine alternative Möglichkeit, dies zu tun (ein Dokument finden, ein bestimmtes Feld in dem Dokument aktualisieren) wäre als eine korrekte Antwort akzeptabel.Wie aktualisiert man ein Dokument basierend auf einer Abfrage mit elasticsearch-js (oder anderen Mitteln)?

+0

Diese noch nicht gewesen Release. Dies wird [verfügbar in der 2.3-API-Version] (https://github.com/elastic/elasticsearch-js/blob/master/src/lib/apis/2_3.js#L6463-L6709) der Javascript-Client-Bibliothek sein. Im Moment unterstützt der JS-Client nur bis zu 'apiVersion: 2.2' – Val

+0

Ich muss ein Feld für meine bestehende Anwendung aktualisieren. Gibt es alternative Methoden, um dies zu erreichen? – Rolando

+0

Wenn es sich um einen einmaligen Bedarf handelt, können Sie es mit [über die REST API] (https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query) durchführen. html) anstatt den JavaScript-Client zu verwenden. – Val

Antwort

2

Dies wurde im JavaScript-Client noch nicht veröffentlicht. Dies wird in der 2.3-API-Version der Javascript-Client-Bibliothek verfügbar sein. Momentan unterstützt der JS-Client nur bis zu apiVersion: 2.2

Sie können einen beliebigen HTTP-Client (Postman, curl,/head /, Sense, ...) verwenden, um den REST-Endpunkt zu erreichen und auszuführen brauchen.

Wenn Sie dies durch Node.js tun müssen, um tun, können Sie das http Modul wie folgt verwenden:

var http = require('http'); 

var options = { 
    host: 'localhost', 
    port: 9200, 
    path: '/your_index/your_type/_update_by_query', 
    method: 'POST' 
}; 

var req = http.request(options, function(resp){ 
    resp.on('data', function(chunk){ 
    // check update response 
    }); 
}).on("error", function(e){ 
    console.log("Got error: " + e.message); 
}); 

var query = { 
    "script": { 
    "inline": "ctx._source.field = 'value2'" 
    }, 
    "query": { 
    "term": { 
     "field": "value1" 
    } 
    } 
}; 

// write data to request body 
req.write(JSON.stringify(query)); 
req.write('\n'); 
req.end(); 
+0

Können Sie das ausprobieren? – Val

+0

Wo würde ich angeben 1) Index, 2) Typ? – Rolando

+0

Sie können sie im 'Pfad' angeben, ich habe die Antwort aktualisiert. – Val

Verwandte Themen