2010-10-25 11 views
15

Mam plik indeksu Solr/Lucene o wartości około 700 Gb. Dokumenty, które muszę indeksować, są odczytywane w czasie rzeczywistym, z grubsza 1000 dokumentów co 30 minut i muszą być indeksowane. W moim scenariuszu skrypt jest uruchamiany co 30 minut, który indeksuje dokumenty, które nie są jeszcze indeksowane, ponieważ jest to wymaganie, aby nowe dokumenty były dostępne do przeszukiwania tak szybko, jak to możliwe, ale proces ten spowalnia wyszukiwanie.Najlepszy sposób na utrzymanie indeksu w czasie rzeczywistym?

Czy to najlepszy sposób na zindeksowanie najnowszych dokumentów lub istnieje inny lepszy sposób!

Odpowiedz

10

Po pierwsze, pamiętaj, że Solr nie jest wyszukiwarką w czasie rzeczywistym (jeszcze). Wciąż jest do wykonania work.

Można użyć master/slave setup, gdzie indeksacja jest wykonywana na wzorcu i wyszukiwaniu na slave. Dzięki temu indeksacja nie wpływa na wydajność wyszukiwania. Po zatwierdzeniu na urządzeniu master wymuszenie na slave pobrania ostatniego indeksu z mastera. Podczas gdy nowy indeks jest replikowany na slave, nadal przetwarza zapytania z poprzednim indeksem.

Sprawdź także cache warming settings. Pamiętaj, że może to spowolnić wyszukiwanie, jeśli ustawienia te są zbyt agresywne. Sprawdź również zapytania uruchomione na new searcher event.

+1

Aktualizacja: Solr ma teraz (prawie) możliwości wyszukiwania w czasie rzeczywistym. – mt3

+0

@ mt3 link, aby uzyskać więcej informacji? – Simon

+1

@Simon Przepraszamy za opóźnioną odpowiedź. Jest w bagażniku oddziału Solr/Lucene. http://wiki.apache.org/solr/NearRealtimeSearch – mt3

4

Możesz to łatwo zrobić z Lucene. Podziel indeksy na wiele części (a dokładniej, budując indeksy, twórz "mniejsze" części.) Utwórz wyszukiwarkę dla każdej części i zapisz odniesienie do nich. Możesz utworzyć MultiSearcher na tych pojedynczych częściach.

Teraz będzie tylko jeden indeks, który dostanie nowe dokumenty. W regularnych odstępach czasu dodawaj dokumenty do tego indeksu, zatwierdzaj i ponownie otwieraj ten program wyszukujący.

Po zaktualizowaniu ostatniego indeksu można ponownie utworzyć nowego wielokrotnego wyszukiwania, korzystając z wcześniej otwartych wyszukiwań.

Tak więc w dowolnym momencie ponownie otworzysz tylko jednego użytkownika, który będzie dość szybki.

1

^^ robię to z normalnym lucene, non solr, i działa naprawdę miło. jednak nie jestem pewien, czy istnieje na to solr w tej chwili. twitter niedawno poszedł z lucene do wyszukiwania i skutecznie wyszukiwał w czasie rzeczywistym, po prostu pisząc do swojego indeksu przy każdej aktualizacji. ich indeks znajduje się całkowicie w pamięci, więc uaktualnianie/czytanie indeksu nie ma znaczenia i dzieje się natychmiast, lucene index zawsze można odczytać podczas pisania, o ile istnieje tylko jeden pisarz na raz.

+0

"dzieje się natychmiast" -> opóźnienie wciąż wynosi około 10 sekund – Karussell

1
+0

Proszę podać więcej niż tylko link w swojej odpowiedzi. Wyciągnij odpowiednie informacje, aby nie każdy musiał kliknąć, i nadal ma pewną wartość, jeśli link nie działa. – agf

Powiązane problemy