2013-06-09 8 views
6

Ho un indice ElasticSearch con circa 200 milioni di documenti, una dimensione totale dell'indice di 90 GB.Come reindex ElasticSearch rapidamente?

Ho modificato la mappatura, quindi vorrei che ElasticSearch indicizzasse nuovamente tutti i documenti.

Ho scritto uno script che crea un nuovo indice (con la nuova mappatura), quindi passa tutti i documenti nel vecchio indice e lo inserisce nel nuovo.

Sembra funzionare, ma il problema è che funziona estremamente lentamente. È iniziato con 300 documenti/minuto due giorni fa, e ora la velocità è di 150 documenti/minuto.

lo script viene eseguito su un computer all'interno della stessa rete le macchine di ricerca elastiche in.

Con tale velocità sarà necessario un mese per la ri-index per terminare.

Qualcuno conosce una tecnica più veloce per reindicizzare un indice di ricerca elastico?

risposta

0

Il modo corretto per reindicizzare con Elasticsearch è utilizzare le API scan e scroll, che devono essere supportate da Pyes.

Sembra che la libreria Pyes abbia un metodo reindex, ma non ho esperienza con esso.

(Se si otterrebbe rispetto all'uso di Rubino su Python :), il Tyre cliente Ruby ha un metodo Index#reindex: https://github.com/karmi/tire/blob/master/test/integration/reindex_test.rb. Dovrebbe essere abbastanza veloce per i dati)

+0

Grazie Karmi! Avete qualche approssimazione su quale dovrebbe essere il tempo previsto per fare una tale operazione su un indice di 90 Gb (documenti 200 M)? – diemacht

+0

Dipende se si può paralizzare l'operazione o meno. Elasticsearch può gestire un carico di scrittura piuttosto elevato, ma lo script di reindicizzazione è solitamente il collo di bottiglia. Prova a reindicizzare solo la parte dei dati ed estrapola - le prestazioni dell'API di scansione/scorrimento non dovrebbero "decadere" nel tempo. – karmi

+2

Sembra che Tyre sia stato deprecato. Elastic ora elenca i clienti consigliati qui: https://github.com/elastic/elasticsearch-rails – spuder