2013-06-09 36 views
6

Mam indeks ElasticSearch z około 200 mln dokumentów, łączny rozmiar indeksu 90Gb.Jak szybko ponownie wyświetlić ElasticSearch?

Zmieniono mapowanie, więc chciałbym, aby ElasticSearch ponownie indeksował wszystkie dokumenty.

Napisałem skrypt, który tworzy nowy indeks (z nowym mapowaniem), a następnie przegląda wszystkie dokumenty ze starego indeksu i umieszcza je w nowym.

Wydaje się działać, ale problem polega na tym, że działa bardzo wolno. Zaczęło się od 300 dokumentów/minutę dwa dni temu, a teraz prędkość wynosi 150 dokumentów/minutę.

Skrypt działa na komputerze w tej samej sieci elastycznych maszyn przeszukać.

Przy takiej prędkości będzie wymagać miesięcy do ponownego indeksu do końca.

Czy ktoś wie o szybszej technice indeksowania indeksu elastycznego wyszukiwania?

Odpowiedz

0

Właściwym sposobem na ponowne wyindeksowanie w Elasticsearch jest użycie interfejsów API scan i scroll, które powinny być obsługiwane przez piki.

Wygląda na to, że biblioteka Pyes ma metodę reindex, ale nie mam z nią doświadczenia.

(Jeśli chcesz dostać się za pomocą Ruby nad Python :) The opon Ruby klient ma metodę Index#reindex: https://github.com/karmi/tire/blob/master/test/integration/reindex_test.rb. Powinien on być wystarczająco szybki dla danych)

+0

Dzięki Karmi! Czy masz jakieś przybliżenie, jaki powinien być przewidywany czas przeprowadzenia takiej operacji na indeksie 90 Gb (200M dokumentów)? – diemacht

+0

To zależy od tego, czy będziesz w stanie przeprowadzić operację równoległą, czy nie. Elasticsearch radzi sobie z dość dużym obciążeniem zapisu, ale zwykle wąskim gardłem jest skrypt reindeksowania. Spróbuj ponownie zindeksować tylko część danych i ekstrapoluj - wydajność interfejsu API skanowania/przewijania nie powinna "zanikać" w miarę upływu czasu. – karmi

+2

Wygląda na to, że Opona została wycofana. Elastic teraz listy poleca klientów tutaj: https://github.com/elastic/elasticsearch-rails – spuder