Ho bisogno di indicizzare/aggiornare un documento in Elasticsearch e attendere fino a quando non è ricercabile (l'aggiornamento è stato eseguito). C'è un problema correlato su Github: https://github.com/elasticsearch/elasticsearch/issues/1063elasticsearch "blocco fino all'aggiornamento"/"attendere che il doc sia ricercabile" alternative
Non imporrò l'aggiornamento perché influisce sulle prestazioni dell'indicizzazione e dovrò eseguire questa operazione molto spesso. Ho provato ad aspettare 1 secondo come descritto nel problema Github. Funziona molto bene finché Elasticsearch non è sotto pressione, ma quando non c'è molta RAM rimasta (cosa che potrebbe accadere occasionalmente) ho visto l'aggiornamento richiedere fino a 5 o 6 secondi. Così ho provato un altro modo.
Ho scritto una funzione di supporto nel mio backend che aspetta che il documento "ricercabile" raggiunga una determinata versione. E 'molto semplice:
- GET the document with realtime=false
- if there is a result
- if result.version >= wanted.version.
Return
- else
wait a little more and retry
- else if the doc is not found
- HEAD the document with realtime=true (test if the doc exists in the transaction log)
- if the doc is found (then it has just been created)
wait a little more and retry
- else
Return. (the doc might have been created and deleted really fast)
La versione ricercato è la versione restituito da elasticsearch quando il documento è stato indicizzato.
Questo algoritmo funziona ma si vede che non è perfetto.
prima si farà più chiamate a elasticsearch quando è sotto pressione, che non è davvero una buona idea.
Ho visto la ricerca elastica ripristinare il numero di versione quando un documento è stato cancellato per qualche tempo. Se per qualche motivo la funzione manca, potremmo aspettare fino a quando il documento non avrà nuovamente raggiunto questa versione. (è per questo che ho anche aggiunto un timeout).
Qualcuno ha una soluzione migliore? Scalare automaticamente non è una risposta accettabile in questo momento.
Penso che valga la pena sottolineare che un effetto collaterale di Elasticsearch come open source e sviluppato apertamente è che solo perché qualcuno del team Elasticsearch propone pubblicamente una cosa non significa che la sua politica aziendale o addirittura una buona idea. Facciamo quasi tutte le proposte pubblicamente perché è così che dovrebbe funzionare l'open source. Hai avuto un'idea migliore e mi hai collegato al post StackOverflow su di esso, per esempio. – Nik
Sì, sono completamente d'accordo. Quello che intendevo era semplicemente "nessuna soluzione migliore di cui abbia mai sentito parlare, per il momento". Non volevo dire "questo è il modo di usare Elasticsearch". Grazie per averlo indicato. Risolverò la risposta per renderla più chiara. – nharraud
Sta per essere chiuso/risolto: https://github.com/elastic/elasticsearch/issues/1063#issuecomment-223368867 –