2014-08-31 13 views
5

Esiste un metodo su elasticsearch per il pieno (non parzialmente) aggiornamento dei documenti e non per crearne di nuovi nel caso in cui non sia già esistente?Aggiornamento completo dei documenti senza creazione se non esistente

Finora, ho trovato che il metodo _update, passando un attributo doc all'interno del corpo della richiesta JSON di aggiornare parzialmente documenti, tuttavia, desidero sostituire l'intero documento in questo caso, non solo parzialmente.

Ho anche trovato che, il metodo index, dove l'invio di una richiesta PUT funziona correttamente, anche se la creazione di un nuovo documento nel caso in cui il id non è ancora indicizzato.

L'impostazione del parametro op_type su create impone l'aggiornamento della creazione del documento. Mi chiedevo se esiste un modo per far rispettare sempre update e mai create uno nuovo?

O forse esiste un altro metodo che mi consenta di raggiungere tale compito?

risposta

0

Se ho capito bene, vuoi indicizzare un documento, ma solo se esiste già? Come un'opzione op_type di update?

È possibile farlo principalmente con l'API di aggiornamento, dato che la mappatura rimane coerente. Con un _update, se il documento non esiste, riceverai un 404. Se esiste, ES unirà il contenuto di doc con qualsiasi documento esistente. Se assicuri di inviare un nuovo documento con tutti i campi della mappatura, allora lo sostituirai in modo definitivo.

Nota, tuttavia, è possibile eseguire l'unione dei documenti in modo efficiente in due richieste; il primo che verifica la presenza del documento con una richiesta HEAD. Se HEAD /idx/type/id ha esito positivo, quindi fare un PUT. Questo è essenzialmente ciò che sta accadendo internamente comunque con l'API di aggiornamento, con un piccolo sovraccarico. Ma lo HEAD è davvero economico perché non mischia alcun payload in giro. Restituisce semplicemente un HTTP 200/404.

+0

suona bene Drew, HEAD, come hai detto è davvero efficiente in questi termini. Grazie per l'aiuto. – zanona

Problemi correlati