2016-06-29 97 views
3

在ElasticSearch我使用UPSERT更新可能不存在的文件(UPSERT對面):ElasticSearch:部分更新文檔或將其刪除。

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

由於我的數據會經常想,如果online == 0刪除我的文檔改變。

如果我需要每次獲取文檔並檢查online值,那麼使用update將無濟於事,而且我不想累積大量垃圾文檔。

online == 0這是刪除我的文檔的最佳方法嗎?喜歡的東西:

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

回答

2

可以使用delete operation這樣的:

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