Jakie są podstawowe różnice architektoniczne między tymi technologiami?
Jakie przypadki użycia są ogólnie bardziej odpowiednie dla każdego z nich?
Jakie są podstawowe różnice architektoniczne między tymi technologiami?
Jakie przypadki użycia są ogólnie bardziej odpowiednie dla każdego z nich?
Odpowiedzi:
Teraz, gdy zakres pytania został poprawiony, mogę również dodać coś w tym względzie:
Istnieje wiele porównań między Apache Solr i ElasticSearch , więc odniosę się do tych, które uważam za najbardziej przydatne, tj. Obejmują najważniejsze aspekty:
Bob Yoplait już powiązał odpowiedź kimchy z ElasticSearch, Sphinx, Lucene, Solr, Xapian. Które pasuje do jakiego zastosowania? , który podsumowuje powody, dla których poszedł do przodu i stworzył ElasticSearch , który jego zdaniem zapewnia znacznie lepszy rozproszony model i łatwość użycia w porównaniu do Solr.
Wyszukiwanie w czasie rzeczywistym Ryana Sonnka : Solr vs Elasticsearch zapewnia wnikliwą analizę / porównanie i wyjaśnia, dlaczego przeszedł z Solr na ElasticSeach, mimo że jest już szczęśliwym użytkownikiem Solr - podsumowuje to następująco:
Solr może być bronią z wyboru przy tworzeniu standardowych aplikacji do wyszukiwania , ale Elasticsearch przenosi go na wyższy poziom dzięki architekturze do tworzenia nowoczesnych aplikacji do wyszukiwania w czasie rzeczywistym . Perkolacja to ekscytująca i innowacyjna funkcja, która jedną ręką wyrzuca Solr z wody. Elasticsearch jest skalowalny, szybki i marzy o integracji . Adios Solr, miło było cię poznać. [moje podkreślenie]
Artykuł w Wikipedii na temat ElasticSearch cytuje porównanie z renomowanego niemieckiego magazynu iX, wymieniając zalety i wady, które prawie podsumowują to, co już powiedziano powyżej:
Zalety :
- ElasticSearch jest rozpowszechniany. Nie jest wymagany osobny projekt. Repliki są również zbliżone do czasu rzeczywistego, co nazywa się „replikacją wypychaną”.
- ElasticSearch w pełni obsługuje wyszukiwanie w czasie rzeczywistym Apache Lucene.
- Obsługa multitenancy nie jest specjalną konfiguracją, w której w Solr konieczna jest bardziej zaawansowana konfiguracja.
- ElasticSearch wprowadza koncepcję Gateway, która ułatwia tworzenie pełnych kopii zapasowych.
Wady :
Tylko jeden główny programista[nie ma już zastosowania zgodnie z obecną organizacją elasticsearch GitHub , poza tym przede wszystkim mając dość aktywną bazę prokurentów]Brak funkcji automatycznego podgrzewania[nie ma już zastosowania zgodnie z nowym interfejsem APIWarmWarmup ]
Są to całkowicie różne technologie uwzględniające zupełnie różne przypadki użycia, dlatego nie można ich w żaden sposób porównać w żaden znaczący sposób:
Apache Solr - Apache Solr oferuje możliwości Lucene w łatwym w użyciu, szybkim serwerze wyszukiwania z dodatkowymi funkcjami, takimi jak faceting, skalowalność i wiele więcej
Amazon ElastiCache - Amazon ElastiCache to usługa internetowa, która ułatwia wdrażanie, obsługę i skalowanie pamięci podręcznej w chmurze.
[moje podkreślenie]
Być może zostało to pomylone z następującymi dwiema powiązanymi technologiami:
ElasticSearch - jest to Open Source (Apache 2), rozproszona, RESTful, wyszukiwarka zbudowana na Apache Lucene.
Amazon CloudSearch - Amazon CloudSearch to w pełni zarządzana usługa wyszukiwania w chmurze, która pozwala klientom łatwo zintegrować szybkie i wysoce skalowalne funkcje wyszukiwania w swoich aplikacjach.
W Solr i ElasticSearch oferta brzmi uderzająco podobne na pierwszy rzut oka, i korzystać z tego samego wyszukiwarkę backend, czyli Apache Lucene .
Podczas gdy Solr jest starszy, dość wszechstronny, dojrzały i odpowiednio stosowany, ElasticSearch został opracowany specjalnie w celu usunięcia niedociągnięć Solr z wymaganiami skalowalności w nowoczesnych środowiskach chmurowych, które są trudniejsze do rozwiązania w Solr .
W związku z tym prawdopodobnie najbardziej przydatne byłoby porównanie ElasticSearch z niedawno wprowadzonym Amazon CloudSearch (zobacz wstępny post Rozpocznij wyszukiwanie za godzinę za mniej niż 100 USD / miesiąc ), ponieważ oba twierdzą, że w zasadzie obejmują te same przypadki użycia.
Widzę, że niektóre z powyższych odpowiedzi są teraz trochę nieaktualne. Z mojego punktu widzenia i codziennie pracuję zarówno z Solr (Cloud i non-Cloud), jak i ElasticSearch, oto kilka interesujących różnic:
Bardziej szczegółowe omówienie tematu Solr vs. ElasticSearch znajduje się na stronie https://sematext.com/blog/solr-vs-elasticsearch-part-1-overview/ . Jest to pierwszy post z serii postów od Sematext wykonujących bezpośrednie i neutralne porównanie Solr vs. ElasticSearch. Ujawnienie: Pracuję w Sematext.
Widzę, że wielu ludzi tutaj odpowiedziało na pytanie ElasticSearch vs Solr pod względem funkcji i funkcjonalności, ale nie widzę tu wiele dyskusji tutaj (ani gdzie indziej) na temat tego, jak porównują pod względem wydajności.
Dlatego postanowiłem przeprowadzić własne dochodzenie . Wziąłem już zakodowaną mikrousługę heterogenicznego źródła danych, która już używała Solr do wyszukiwania terminów. Wyłączyłem Solr dla ElasticSearch, a następnie uruchomiłem obie wersje na AWS z już zakodowaną aplikacją do testowania obciążenia i przechwyciłem wskaźniki wydajności do późniejszej analizy.
Oto co znalazłem. ElasticSearch miał o 13% wyższą przepustowość, jeśli chodzi o indeksowanie dokumentów, ale Solr był dziesięć razy szybszy. Jeśli chodzi o sprawdzanie dokumentów, Solr miał pięciokrotnie większą przepustowość i był pięciokrotnie szybszy niż ElasticSearch.
Od długiej historii Apache Solr uważam, że jedną z jego zalet jest ekosystem . Istnieje wiele wtyczek Solr dla różnych typów danych i celów.
Wyszukaj platformę w następujących warstwach od dołu do góry:
Artykuł referencyjny: Wyszukiwanie korporacyjne
Stworzyłem tabelę głównych różnic między elasticsearch a Solr i splunk, możesz użyć jej jako aktualizacji 2016:
Pracowałem nad solr i elastycznym wyszukiwaniem aplikacji .Net. Główną różnicą, z jaką się spotkałem, jest
Wyszukiwanie elastyczne:
Solr:
Chociaż wszystkie powyższe linki mają swoje zalety i przyniosły mi wiele korzyści w przeszłości, jako językoznawca „narażony” na różne wyszukiwarki Lucene przez ostatnie 15 lat, muszę powiedzieć, że rozwój elastycznych wyszukiwań jest bardzo szybki w Pythonie. To powiedziawszy, część kodu wydawała mi się nieintuicyjna. Dotarłem więc do jednego ze składników stosu ELK, Kibana, z perspektywy open source i stwierdziłem, że w Kibanie mogę bardzo łatwo wygenerować nieco tajemniczy kod elasticsearch. Mogę również pobrać zapytania z Chrome Sense do Kibana. Jeśli użyjesz Kibana do oceny es, przyspieszy to twoją ocenę. Godziny pracy na innych platformach działały w JSON w Sense na szczycie elasticsearch (interfejs RESTful) w najgorszym przypadku w ciągu kilku minut (największe zbiory danych); co najwyżej w kilka sekund. Dokumentacja dla elasticsearch, podczas gdy ponad 700 stron, nie odpowiadała na moje pytania, które normalnie zostałyby rozwiązane w SOLR lub innej dokumentacji Lucene, co oczywiście wymagało więcej czasu na analizę. Możesz także rzucić okiem na agregaty w wyszukiwaniu elastycznym, które wprowadziły faceting na nowy poziom.
Większy obraz: jeśli zajmujesz się analizą danych, analizą tekstu lub lingwistyką obliczeniową, elasticsearch ma kilka algorytmów rankingowych, które wydają się być innowacyjne w dziedzinie wyszukiwania informacji. Jeśli używasz dowolnego algorytmu TF / IDF, częstotliwości tekstu / odwrotnej częstotliwości dokumentów, elasticsearch rozszerza algorytm z lat 60. na nowy poziom, nawet przy użyciu algorytmów BM25, najlepszego dopasowania 25 i innych algorytmów rankingu trafności. Jeśli więc oceniasz lub uszeregowujesz słowa, frazy lub zdania, elasticsearch dokonuje tego oceniania w locie, bez dużego obciążenia innymi podejściami do analizy danych, które zajmują godziny - kolejne oszczędności czasu elastycznego wyszukiwania. Dzięki es, łącząc niektóre zalety wiadra z agregacji z punktacją i rankingiem trafności danych JSON w czasie rzeczywistym, można znaleźć zwycięską kombinację,
Uwaga: widziałem podobną dyskusję na temat agregacji powyżej, ale nie na temat agregacji i oceny trafności - przepraszam za jakiekolwiek nakładanie się. Ujawnienie: Nie pracuję dla elastycznych i nie będę w stanie czerpać korzyści z ich doskonałej pracy ze względu na inną ścieżkę architektoniczną, chyba że wykonam jakieś prace charytatywne z elasticsearch, co nie byłoby złym pomysłem
Wyobraź sobie przypadek użycia:
Pomysł posiadania osobnej instancji ES dla każdego indeksu - w tym przypadku jest to ogromny narzut.
Z mojego doświadczenia wynika, że ten rodzaj użycia jest bardzo skomplikowany do obsługi w Elasticsearch.
Dlaczego?
PIERWSZY.
Głównym problemem jest podstawowe pominięcie kompatybilności wstecznej.
Przełomowe zmiany są takie fajne! (Uwaga: wyobraź sobie serwer SQL, który wymaga niewielkiej zmiany we wszystkich instrukcjach SQL, gdy zostanie zaktualizowany ... nie wyobrażam sobie tego. Ale w przypadku ES jest to normalne)
Odstąpienia, które pojawią się w następnej głównej wersji, są tak seksowne! (Uwaga: wiesz, Java zawiera pewne przestarzałe, które mają ponad 20 lat, ale nadal działają w rzeczywistej wersji Java ...)
I nie tylko to, czasami masz nawet coś, czego nigdzie nie udokumentowałem (osobiście natknąłem się tylko raz, ale ...)
Więc. Jeśli chcesz zaktualizować ES (ponieważ potrzebujesz nowych funkcji dla niektórych aplikacji lub chcesz uzyskać poprawki błędów) - jesteś w piekle. Zwłaszcza jeśli chodzi o aktualizację wersji głównej.
Interfejs API klienta nie będzie zgodny z powrotem. Ustawienia indeksu nie będą zgodne. Uaktualnienie wszystkich aplikacji / usług w tym samym momencie dzięki aktualizacji ES nie jest realistyczne.
Ale musisz to robić od czasu do czasu. Żaden inny sposób.
Istniejące indeksy są automatycznie aktualizowane? - Tak. Ale to nie pomoże, gdy będziesz musiał zmienić niektóre ustawienia starego indeksu.
Aby z tym żyć, musisz nieustannie inwestować dużo energii w ... zgodność z aplikacjami / usługami w przyszłych wersjach ES. Lub musisz zbudować (i tak dalej stale wspierać) jakieś oprogramowanie pośrednie między twoją aplikacją / usługami a ES, które zapewnią ci kompatybilny interfejs API klienta. (I nie możesz używać Transport Client (ponieważ wymagało to aktualizacji jar dla każdej mniejszej wersji ES aktualizacji), a ten fakt nie ułatwia ci życia)
Czy to wygląda prosto i tanio? Nie, nie jest. Daleko stąd. Ciągłe utrzymanie złożonej infrastruktury opartej na ES jest drogą we wszystkich możliwych aspektach.
DRUGA. Proste API? Cóż ... nie, naprawdę. Kiedy naprawdę używasz złożonych warunków i agregacji ... Żądanie JSON z 5 zagnieżdżonymi poziomami jest dowolne, ale nie proste.
Niestety nie mam doświadczenia z SOLR, nie mogę nic o tym powiedzieć.
Ale Sphinxsearch jest znacznie lepszy w tym scenariuszu, ze względu na całkowicie kompatybilny SphinxQL.
Uwaga: Sphinxsearch / Manticore są naprawdę interesujące. Nie jest oparty na Lucine, a co za tym idzie poważnie inny. Zawiera kilka unikalnych funkcji z pudełka, których nie ma ES, i szalonych szybko z indeksami małych / średnich rozmiarów.
Jeśli już używasz SOLR, trzymaj się go. Jeśli zaczynasz, przejdź do wyszukiwania elastycznego.
Maksymalne główne problemy zostały naprawione w SOLR i jest on dość dojrzały.
Używam Elasticsearch od 3 lat, a Solr od około miesiąca, uważam, że klaster elasticsearch jest dość łatwy do zainstalowania w porównaniu do instalacji Solr. Elasticsearch ma pulę dokumentów pomocy z doskonałym wyjaśnieniem. Jeden z przypadków użycia utknąłem z agregacją histogramów, która była dostępna w ES, ale nie została znaleziona w Solr.
Używam tylko wyszukiwania elastycznego. Ponieważ znalazłem solr jest bardzo trudny do uruchomienia. Funkcje wyszukiwania elastycznego: