Obecnie patrzę na inne metody wyszukiwania zamiast na ogromne zapytanie SQL. Ostatnio widziałem elasticsearch i bawiłem się z whoosh (implementacja wyszukiwarki w Pythonie).
Czy możesz podać powody swojego wyboru?
Obecnie patrzę na inne metody wyszukiwania zamiast na ogromne zapytanie SQL. Ostatnio widziałem elasticsearch i bawiłem się z whoosh (implementacja wyszukiwarki w Pythonie).
Czy możesz podać powody swojego wyboru?
Odpowiedzi:
Jako twórca ElasticSearch, może mogę podać kilka powodów, dla których postanowiłem i stworzyłem go w pierwszej kolejności :).
Korzystanie z czystej Lucene jest wyzwaniem. Jest wiele rzeczy, na które musisz uważać, jeśli chcesz, aby naprawdę dobrze działało, a także, że jest to biblioteka, więc nie ma rozproszonego wsparcia, to tylko wbudowana biblioteka Java, którą musisz utrzymywać.
Jeśli chodzi o użyteczność Lucene, dawno temu (prawie 6 lat) stworzyłem Compass. Jego celem było uproszczenie korzystania z Lucene i uproszczenie codziennej Lucene. To, co napotykałem raz za razem, to wymóg, aby mieć możliwość dystrybucji Compass. Zacząłem nad tym pracować z poziomu Compass, integrując się z rozwiązaniami sieci danych, takimi jak GigaSpaces, Coherence i Terracotta, ale to nie wystarczy.
U podstaw rozproszonego rozwiązania Lucene należy podzielić. Ponadto, wraz z postępem HTTP i JSON jako wszechobecnych interfejsów API, oznacza to, że można łatwo zastosować wiele różnych systemów z różnymi językami.
Właśnie dlatego stworzyłem ElasticSearch. Ma bardzo zaawansowany model rozproszony, mówi natywnie JSON i udostępnia wiele zaawansowanych funkcji wyszukiwania, wszystkie płynnie wyrażone za pomocą JSON DSL.
Solr jest także rozwiązaniem do eksponowania serwera indeksowania / wyszukiwania przez HTTP, ale argumentowałbym, że ElasticSearch zapewnia znacznie lepszy rozproszony model i łatwość użycia (chociaż obecnie brakuje niektórych funkcji wyszukiwania, ale nie na długo i w żadnym innym w tym przypadku plan polega na przeniesieniu wszystkich funkcji kompasu do ElasticSearch). Oczywiście jestem stronniczy, ponieważ stworzyłem ElasticSearch, więc być może będziesz musiał sprawdzić sam.
Jeśli chodzi o Sfinksa, nie użyłem go, więc nie mogę komentować. Mogę odesłać cię do tego wątku na forum Sphinx, który, jak sądzę, dowodzi doskonałego rozproszonego modelu ElasticSearch.
Oczywiście ElasticSearch ma o wiele więcej funkcji niż tylko dystrybucję. W rzeczywistości jest zbudowany z myślą o chmurze. Możesz sprawdzić listę funkcji na stronie.
źródło
Użyłem Sphinx, Solr i Elasticsearch. Solr / Elasticsearch są zbudowane na bazie Lucene. Dodaje wiele typowych funkcji: interfejs serwera WWW, faceting, buforowanie itp.
Jeśli chcesz mieć prostą konfigurację wyszukiwania pełnotekstowego, Sphinx jest lepszym wyborem.
Jeśli chcesz w ogóle dostosować wyszukiwanie, lepszym wyborem są Elasticsearch i Solr. Są bardzo rozszerzalne: możesz pisać własne wtyczki, aby dostosować punktację wyników.
Niektóre przykładowe zastosowania:
źródło
Używamy Lucene regularnie do indeksowania i przeszukiwania dziesiątek milionów dokumentów. Wyszukiwanie jest dość szybkie i korzystamy z aktualizacji przyrostowych, które nie zajmują dużo czasu. Dotarcie tutaj zajęło nam trochę czasu. Mocną stroną Lucene jest jego skalowalność, szeroki zakres funkcji i aktywna społeczność programistów. Używanie nagiej Lucene wymaga programowania w Javie.
Jeśli zaczynasz od nowa, narzędziem dla ciebie w rodzinie Lucene jest Solr , który jest o wiele łatwiejszy do skonfigurowania niż nagi Lucene i ma prawie całą moc Lucene. Może łatwo importować dokumenty bazy danych. Solr są napisane w Javie, więc każda modyfikacja Solr wymaga znajomości języka Java, ale można wiele zrobić, modyfikując pliki konfiguracyjne.
Słyszałem także dobre rzeczy o Sphinx, szczególnie w połączeniu z bazą danych MySQL. Jednak nie użyłem tego.
IMO, powinieneś wybrać według:
źródło
Używamy Sfinksa w projekcie wyszukiwania pionowego z ponad 10 000 000 rekordów MySql i ponad 10 różnymi bazami danych. Ma bardzo doskonałe wsparcie dla MySQL i wysoką wydajność indeksowania, badania są szybkie, ale może trochę mniej niż Lucene. Jest to jednak właściwy wybór, jeśli potrzebujesz szybko indeksować codziennie i używać bazy danych MySQL.
źródło
Eksperyment w celu porównania ElasticSearch i Solr
źródło
Mój sphinx.conf
Skrypt testowy:
Przykładowy wynik:
Czas zapytania Sfinksa:
Czas zapytania Sfinksa (równoczesny 1k):
Czas zapytania MySQL:
Czas zapytania MySQL (równoczesny 1k):
źródło
Jedyne porównanie wydajności elasticsearch vs solr, jakie udało mi się znaleźć do tej pory, to:
Solr vs elasticsearch Deathmatch!
źródło
Lucene jest fajna, ale ich zestaw słów jest okropny. Musiałem ręcznie dodać tonę słów stop do StopAnalyzer.ENGLISH_STOP_WORDS_SET tylko po to, aby zbliżyć je w dowolnym miejscu do użycia.
Nie korzystałem ze Sfinksa, ale wiem, że ludzie przysięgają na jego szybkość i niemal magiczny stosunek „łatwości konfiguracji do niesamowitości”.
źródło
Wypróbuj indextank.
W przypadku wyszukiwania elastycznego pomyślano, że jest znacznie łatwiejszy w użyciu niż lucene / solr. Zawiera również bardzo elastyczny system oceniania, który można modyfikować bez ponownego indeksowania.
źródło