2012-04-25 16 views
18

Czytam artykuł Douga Cutting; "Space optimizations for total ranking".Algorytm Lucene'a

Odkąd został napisany dawno temu, zastanawiam się, jakich algorytmów używa lucene (w odniesieniu do przechodzenia listy wpisów i obliczania wyniku, rankingu).

W szczególności, opisany tam algorytm klasyfikacji całkowitej obejmuje przechodzenie przez całą listę księgowań dla każdego zapytania, więc w przypadku bardzo popularnych terminów zapytań, takich jak "żółty pies", jedno z dwóch terminów może mieć bardzo długie posty lista w przypadku wyszukiwania w Internecie. Czy naprawdę są oni obecni w Lucene/Solr? Czy są jakieś heurystyki do skracania listy?

W przypadku, gdy zwracane są tylko najwyższe wyniki k, rozumiem, że dystrybucja listy księgowań na wielu komputerach, a następnie łączenie najwyższego k z każdego z nich zadziała, ale jeśli będziemy musieli zwrócić "setną strona wyników ", czyli wyniki w rankingu od 990-1000th, wtedy każda partycja będzie musiała jeszcze znaleźć top 1000, więc partycja niewiele by pomogła.

Czy istnieje jakaś szczegółowa dokumentacja dotycząca wewnętrznych algorytmów używanych przez Lucene?

+0

dodatkowo, każdy wie, z grubsza (oczywiście szczegóły są tajemnicą, ale myślę, że główne pomysły powinny być dość powszechne w tych dniach), w jaki sposób Google wykonuje szybką pozycję w przypadku zapytań wielo-terminowych z AND? (jeśli ich księgowania są sortowane według kolejności w rankingu PageRank, zrozumiałe jest, że zapytanie jednokrotne szybko zwróci wartość top-k, ale jeśli jest to termin wielokrotny, będą musiały przechodzić przez całą listę, aby znaleźć zestaw wstawienia, ponieważ listy nie są sortowane według dokumentu, tak jak w przypadku Lucene). –

+0

Nie wiem, jak to działa, ale jeśli chcesz zrobić wczesne zakończenie zapytania, powinieneś dopasować porządek indeksu (doc dokumentów) do trafności (pagerank w twoim case), przynajmniej w podziale na segmenty. Rozwiązałoby to Twój problem w przypadku zapytań długoterminowych. – jpountz

Odpowiedz

30

Nie znam takiej dokumentacji, ale skoro Lucene jest open-source, zachęcam do przeczytania kodu źródłowego. W szczególności bieżąca wersja magistrali zawiera flexible indexing, co oznacza, że ​​przechodzenie listy przechowywania i publikowania zostało odłączone od reszty kodu, co umożliwia pisanie niestandardowych koderów-dekoderów.

Twoje założenia są poprawne, jeśli chodzi o zaksięgowanie przeniesienia listy, domyślnie (zależy to od implementacji Scorer). Lucene przegląda całą listę księgowań dla każdego terminu obecnego w zapytaniu i umieszcza pasujące dokumenty w stercie o rozmiarze k, aby obliczyć szczyt -k docs (patrz TopDocsCollector). Powracające wyniki od 990 do 1000 powodują, że Lucene tworzy instancję o wielkości 1000. Jeśli podzielisz indeks według dokumentu (inne podejście może być podzielone według terminu), każdy fragment będzie musiał wysłać najlepsze 1000 wyników do serwera, który jest odpowiedzialny za łączenie wyników (patrz np. Solr QueryComponent, który tłumaczy zapytanie z N na P> N na kilka żądań od 0 do P sreq.params.set(CommonParams.START, "0");). Dlatego Solr może działać wolniej w trybie rozproszonym niż w trybie autonomicznym w przypadku ekstremalnego stronicowania.

Nie wiem, jak Google udaje się skutecznie oceniać wyniki, ale Twitter opublikował numer paper on their retrieval engine Earlybird, w którym wyjaśnił, w jaki sposób załatał Lucene, aby wykonać odwrotną kolejność chronologicznych list, co pozwala im zwrócić najwięcej ostatnie tweety pasujące do zapytania bez przechodzenia przez całą listę księgowań dla każdego terminu.

Aktualizacja: Znalazłem presentation z Googler Jeff Dean, która wyjaśnia, jak Google zbudował swój system pobierania informacji dużą skalę. W szczególności mówi o strategiach shardowania i kodowaniu list.

+0

bardzo dziękuję za odpowiedź, postaram się przekopać link na Twitterze, aby zobaczyć, czy mogę znaleźć więcej referencji –

+0

, jeśli cała lista wpisów jest wykonywana, co sugeruje, że Lucene nie jest tak naprawdę możliwe do wyszukiwania w sieci , ponieważ coś takiego jak "żółty pies" wiąże się z miliardami stron internetowych na świecie. nawet po agresywnym partycjonowaniu, czas przechodzenia postów na każdym pudełku byłby zbyt długi –

+0

Fantastyczne rzeczy jpountz – Yavar