2008-12-08 12 views
18

Używam Lucene, aby wyświetlać wyniki wyszukiwania w aplikacji internetowej. Mam również niestandardowe stronicowanie, które pokazuje to samo. Wyniki wyszukiwania mogą się różnić od 5000 do 10000 lub więcej. Czy ktoś może mi powiedzieć najlepszą strategię stronicowania i buforowania wyników wyszukiwania?Wyniki wyszukiwania Paging Lucene

+2

Ten użytkownik wydaje się być ponownie prosząc te same lub podobne pytania wielokrotnie: http: // stackoverflow. com/users/41625/meyahoocomaodzxyowykprbavs5sf701zowgzpc3svjv8 Sprawdź rekord wpisu, zanim poświęcisz czas na odpowiedź ... –

Odpowiedz

32

Zalecam, aby nie buforować wyników, przynajmniej na poziomie aplikacji. Ułatwia to działanie Lucene na pudełku z dużą ilością pamięci, którą system operacyjny może wykorzystać do swojej pamięci podręcznej plików.

Po prostu powtórz wyszukiwanie z innym przesunięciem dla każdej strony. Buforowanie wprowadza stanowość, która ostatecznie podważa wydajność. Mamy setki równoczesnych użytkowników przeszukujących indeks ponad 40 milionów dokumentów. Wyszukiwanie zakończy się w czasie krótszym niż jedna sekunda bez użycia jawnego buforowania.

Korzystanie przedmiotem Hits wrócił z wyszukiwania, można uzyskać dostęp do dokumentów na stronie tak:

Hits hits = searcher.search(query); 
int offset = page * recordsPerPage; 
int count = Math.min(hits.length() - offset, recordsPerPage); 
for (int i = 0; i < count; ++i) { 
    Document doc = hits.doc(offset + i); 
    ... 
} 
+0

Czy nadal nie masz problemów z wydajnością? –

+0

Witaj, erickson ... czy możesz mi powiedzieć, od której wersji lucene obsługuje metodę wyszukiwania, która przyjmuje tylko 1 argument zapytania ... a także jest możliwe sortowanie za pomocą tego rozwiązania. ??? –

+0

@AshaKoshti Forever? To było w wersji 1.4.3, wydanej w 2004 roku. Nie mogę znaleźć wersji starszej niż w archiwach. Tak, istnieje również przeładowanie 'search (Query, Sort)' na 'Searcherze'. – erickson