2013-07-21 14 views
8

To nie jest po raz pierwszy pytanie to było asked tutaj w Stackoverflow - ale jest prawie pięć lat później - i czasy i technologie nieco się zmieniły. Zastanawiam się, co ludzie myślą obecnie o budowaniu wyszukiwarki?Jak zbudować wyszukiwarkę? (Aktualizacja 2013)

Na przykład wiem, że nadal rozwijane jest oprogramowanie Nutch - ale czy jest to nadal najbardziej niezawodne rozwiązanie? Czy istnieją alternatywne dojrzałe rozwiązania dla innych języków - np. C#, PHP, VB.NET?

Wiem również, że istnieje obecnie publicznie dostępny indeks masy, który można wykorzystać, zmniejszając potrzebę wykonywania własnych spidering z Common Crawl.

Istnieje oczywiście kilka niestandardowych rozwiązań wyszukiwawczych, z których najbardziej znany jest Google's CSE ... ale nie jestem świadomy żadnych innych poważnych/stabilnych/renomowanych, którym mógłbym zaufać silnik na?

Jakie zasoby są dostępne teraz, aby nauczyć się wyszukiwarek programistycznych, które nie były dostępne kilka lat temu, a nawet w zeszłym roku?

Odpowiedz

1

użyję to pytanie udostępnić pewne doświadczenie w pisaniu mały wyszukiwarkę od podstaw (nie szukaj specyficznych biblioteki zostały użyte) na dość mały zbiór danych (w rzeczywistości przeszukuje stackoverflow, ponieważ nie był ani zbyt mały, ani zbyt duży, aby działał na pojedynczym serwerze). Check it out. Poniżej znajdują się moje ustalenia na ten temat.

gąsienicowe

pierwsze, robot jest trudne rzeczy do zrobienia. Prawdziwym problemem jest zapis danych na dysku tak szybko, jak tylko uzyskasz strony internetowe. Główna struktura danych jest odwróconym indeksem, więc kiedy pojawi się słowo "banan", musisz pobrać z dysku indeks "banana" (lista dokumentów, w których występuje - wraz z pozycjami w dokumencie) dołączyć do nowego rekordu i zapisz to z powrotem. W miarę jak lista rośnie, ciągnięcie i zapisywanie jej cofa się coraz wolniej. Jedna sztuczka polegałaby na podzieleniu odwróconych indeksów (i dokumentów) na partycje, powiedzmy 1-1000 dokumentów w pierwszej partycji i tak dalej. Inną "sztuczką" jest podczas indeksowania partycji, aby zachować indeksy w pamięci i wypróżnić je na dysk tylko po wykonaniu partycji.

Ważny bit: co użyć do przechowywania danych? Jest wiele opcji i po wielu eksperymentach odkryłem, że najlepszym wyborem jest dzisiaj. I nie zapomnij dysków SSD!

Tak więc, w ten sposób indeksowanie większości stackoverflow (~ 13 000 000 stron) w ten sposób przy użyciu jednej maszyny (pamięć 4 Gb) trwa około 2 miesięcy. I wynikowe dane (odwrócony indeks, surowy tekst pozbawiony tekstu, itp.) - około 80 GB miejsca na dysku.

Szukaj

Celem jest, aby zrobić to szybko iz wysoką jakością. Jedną rzeczą do zrealizowania jest to, że jeśli chcesz, aby była szybka, nie możesz przeszukiwać całego zestawu danych. Na szczęście wszystko zostało podzielone na partycje, więc wyszukiwanie odbywa się na pierwszych 100 partycjach, w których pojawiają się słowa kluczowe (osobny indeks) i jeśli znajdzie "wystarczająco dobre" wyniki - zatrzymuje się, jeśli nie - bierze kolejne 100 i tak dalej.

Najwolniej jest czytać indeksy z dysku i deseasemalizować go.Leveldb obsługuje szybkie sekwencyjne czytanie, więc dane muszą być przechowywane w taki sposób, aby większość z nich mogła być czytana sekwencyjnie. Po skrzyżowaniu zestawu pamięci jest dość szybko.

Teraz jakość. To jest najtrudniejsze i nigdy wystarczająco dobre. Moją pierwszą próbą było zachowanie odwróconych indeksów nie tylko dla tekstu, ale także dla tytułów, tekstu linku i adresów URL. Każde trafienie w te dodaje kilka punktów do dokumentu. Kolejną kwestią jest przeformułowanie zapytania za pomocą synonimów i sprawdzenie, które zapytanie działa najlepiej. To prawdopodobnie zasługuje na wpis w jego własnym.

W każdym razie, mam nadzieję, że będzie przydatne czytanie!

Powiązane problemy