2016-06-29 2 views
3

В ElasticSearch я использую upsert обновить документ, который не может существовать:ElasticSearch: Частично обновите документ или удалите его. (Напротив upsert)

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

Поскольку мои данные собираются часто я хочу удалить мой документ, если online == 0 изменить.

Было бы бесполезно использовать update, если мне нужно получить документ и проверить значение online каждый раз, и я не хочу накапливать много мусорных документов.

Каков наилучший способ удалить мой документ, когда 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 
    } 
} 
Смежные вопросы