2016-06-29 8 views
3

In Elasticsearch Ich verwende Upsert ein Dokument zu aktualisieren, die möglicherweise nicht vorhanden:ElasticSearch: Teilweise aktualisieren Sie ein Dokument oder entfernen Sie es. (Das Gegenteil von Upsert)

POST /website/pageviews/1/_update 
{ 
    "script" : "ctx._source.online+=1", 
    "upsert": { 
     "online": 1 
    } 
} 

Da meine Daten ändern wollen oft möchte ich mein Dokument, wenn online == 0 entfernen.

Es wäre nutzlos, update zu verwenden, wenn ich das Dokument abrufen und online Wert jedes Mal überprüfen muss, und ich möchte nicht viele Papierkorb-Dokumente ansammeln.

Welches ist der beste Weg, um mein Dokument zu entfernen, wenn online == 0? Etwas wie:

POST /website/pageviews/1/_update 
{ 
    "script" : "ctx._source.online-=1", 
    "remove_doc": "ctx._source.online == 0" 
} 

Antwort

2

Sie können die delete operation wie folgt verwenden:

POST /website/pageviews/1/_update 
{ 
    "script" : "if (online == 0) { ctx.op = 'delete' } else { ctx._source.online += 1 }", 
    "upsert": { 
     "online": 1 
    } 
} 
Verwandte Themen