2015-11-10 4 views
0

Я хочу обновить документ. Поэтому каждый раз, когда я хочу обновить объект, я сериализую его, и я отправляю его в ES. Представьте объект POJO с.удалить поле для документа на elasticsearch

obj.status = 20; 
obj.description = "raw description"; 

Когда я обновляю этот объект это сериализованная и индексируется на ES как:

{ 
    status: 20, 
    description: "raw description" 
} 

Итак, мне сейчас нужно обновить этот объект как:

obj.status = null; 

Тогда я сериализовать:

{ 
    description: "raw description" 
} 

Проблема в том, что теперь я не хочу, чтобы status был проиндексирован. Проблема в том, что ES объединяет этот объект с индексированным предыдущим. Таким образом, по индексу этот документ:

{ 
    status: 20, 
    description: "raw description" 
} 

Итак, мне нужно «удалить» это поле из индекса.

Любые идеи. Спасибо.

+0

Вы используете API-интерфейс индекса или API-интерфейс обновления? –

+0

Я использую API обновления. – Jordi

ответ

0

У вас есть 2 решения.

  1. Используйте Update API с сценарием вместо дока
  2. Используйте Index API, по переиндексации документа с таким же Id вы можете удалить поле. API-интерфейс Index ведет себя как upsert.

примеры кода:

# Update API with Script 
POST your_index/your_type/1/_update 
{ 
    "script" : "ctx._source.remove(\"status\")" 
} 
# Index API to reindex 
PUT your_index/your_type/1 
{ 
    description: "raw description" 
} 

Обновление API инициирует чтение перед записью, в то время как индекс API только вызывает Write.

Смежные вопросы