Solr vs. ElasticSearch [zamknięte]

729

Jakie są podstawowe różnice architektoniczne między tymi technologiami?

Jakie przypadki użycia są ogólnie bardziej odpowiednie dla każdego z nich?

Ben ODay
źródło
6
możesz na to
rzucić
13
Ten post jest nowy i całkiem dobry z mojego punktu, datanami.com/2015/01/22/solr-elasticsearch-question
Eric Wang
3
Kolejne porównanie z 2015 r .: quora.com/…
rleir
Zobacz solr-vs-elasticsearch.com
Philip Bergström

Odpowiedzi:

558

Aktualizacja

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 API Warm Warmup ]

Pierwsza odpowiedź

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.

    • Należy pamiętać, że Amazon ElastiCache jest zgodny z protokołem Memcached, powszechnie przyjętym systemem buforowania obiektów pamięci, więc kod, aplikacje i popularne narzędzia, których używasz dzisiaj w istniejących środowiskach Memcached, będą bezproblemowo współpracować z usługą ( szczegółowe informacje znajdują się w Memcached ).

[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.

Steffen Opel
źródło
@boday: Wygląda na to, że rzeczywiście używają elastycznych wyszukiwań opartych na Lucene .
Steffen Opel
6
Teraz, gdy za elasticsearch stoi firma, jedna główna wada programisty powinna zniknąć.
javanna,
2
Wygląda na to, że automatyczne podgrzewanie jest teraz obsługiwane przez ElasticSearch. Zobacz github.com/elasticsearch/elasticsearch/issues/1913
unludo
37
Wszystkie zalety ElasticSearch wymienione w dziale czasopisma iX są teraz błędne. 1) SolrCloud nie jest już osobnym projektem. Rzeczywiście, Solr i Lucene są teraz częścią tego samego projektu. 2) Solr obsługuje NRT. 3) Solr obsługuje wiele kolekcji w jednym klastrze 4) Solr dodał również funkcję replikacji, która ułatwia tworzenie kopii zapasowych.
MattMcKnight
2
Nie zapomnij o agregacjach, które udostępnia ElasticSearch dla osób wymagających funkcjonalności podobnej do OLAP. Chmura Solr ma tylko ograniczone aspekty. A jeśli potrzebujesz alertów dotyczących agregacji, ES perkolacja dostarcza.
markgiaconia
205

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:

  • Społeczność: Solr ma większą, bardziej dojrzałą społeczność użytkowników, deweloperów i współpracowników. ES ma mniejszą, ale aktywną społeczność użytkowników i rosnącą społeczność współpracowników
  • Dojrzałość: Solr jest bardziej dojrzały, ale ES szybko się rozwija i uważam, że jest stabilny
  • Wydajność: trudna do oceny. Ja / my nie przeprowadziliśmy bezpośrednich testów wydajności. Osoba na LinkedIn raz porównała Solr vs. ES vs. Sensei, ale początkowe wyniki powinny zostać zignorowane, ponieważ użyli konfiguracji nie-eksperckiej zarówno dla Solr, jak i ES.
  • Projekt: Ludzie kochają Solr. Java API jest nieco gadatliwy, ale ludziom podoba się to, jak się składa. Kod Solr niestety nie zawsze jest bardzo ładny. Ponadto ES ma wbudowane sharding, replikację w czasie rzeczywistym, dokumentację i routing. Chociaż niektóre z nich istnieją również w Solr, wydaje się, że to trochę po namyśle.
  • Wsparcie: istnieją firmy zapewniające wsparcie techniczne i doradcze zarówno dla Solr, jak i ElasticSearch. Myślę, że jedyną firmą, która zapewnia wsparcie dla obu, jest Sematext (ujawnienie: Jestem założycielem Sematext)
  • Skalowalność: oba można skalować do bardzo dużych klastrów. ES jest łatwiejszy do skalowania niż wersja Solr wcześniejsza niż Solr 4.0, ale w Solr 4.0 już tak nie jest.

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.

Otis Gospodnetic
źródło
@Rubytastic - możesz skomentować post, aby zwrócić uwagę autora i uzyskać trochę zużycia pamięci. Ale post na blog.sematext.com/2012/05/17/elasticsearch-cache-usage może już mieć to, czego szukasz.
Otis Gospodnetic
1
Dziękujemy za udostępnienie dobrze napisanej opinii z pierwszej ręki i postów na blogu. Minęły 2 lata od tego postu. Myślę, że społeczność skorzystałaby, gdybyś mógł podzielić się więcej spostrzeżeniami zebranymi po drodze. Coś, co może pomóc ludziom zdecydować, który spośród solr / elasticSearch jest dla nich lepszy.
użytkownik
Dodałbym, że dzięki DataStax zbliżasz się do replikacji w czasie rzeczywistym z Solr.
KingOfHypocrites
23

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.

Glenn
źródło
Co ciekawe, właśnie analizowałem Solr i Elasticsearch i stwierdziłem, że indeksowanie tego samego zestawu dokumentów 1M zajęło dwa razy więcej czasu dla Elasticsearch niż Solr.
David Thomas
16

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.

stos solr

Wyszukaj platformę w następujących warstwach od dołu do góry:

  • Dane
    • Cel: Reprezentowanie różnych typów danych i źródeł
  • Budowanie dokumentów
    • Cel: Zbuduj informacje o dokumencie do indeksowania
  • Indeksowanie i wyszukiwanie
    • Cel: Zbuduj i przeszukaj indeks dokumentów
  • Ulepszenie logiki
    • Cel: dodatkowa logika przetwarzania zapytań i wyników wyszukiwania
  • Wyszukaj usługę platformy
    • Cel: Dodaj dodatkowe funkcje rdzenia wyszukiwarki, aby zapewnić platformę usług.
  • Aplikacja interfejsu użytkownika
    • Cel: interfejs lub aplikacje wyszukiwania użytkownika końcowego

Artykuł referencyjny: Wyszukiwanie korporacyjne

mingxue
źródło
14

Stworzyłem tabelę głównych różnic między elasticsearch a Solr i splunk, możesz użyć jej jako aktualizacji 2016: wprowadź opis zdjęcia tutaj

Fardin Behboudi
źródło
1
Wiersz schematu danych jest nieco mylący ... Elastic ma odwzorowania, które są zasadniczo schematem (ale domyślnie nie są wymagane). Solr jest dostarczany w taki sposób, że należy zainstalować konfigurację, zanim zadziała, istnieje kilka dostarczonych przykładowych konfiguracji, z których można wybierać od razu, a jedna nie zawiera schematów, chociaż ostrożnie kontrolowane schematy są prawdopodobnie bardziej powszechne podczas korzystania z solr.
Gus
2
Solr Streaming API zapewnia funkcje MapReduce
które
13

Pracowałem nad solr i elastycznym wyszukiwaniem aplikacji .Net. Główną różnicą, z jaką się spotkałem, jest

Wyszukiwanie elastyczne:

  • Więcej kodu i mniej konfiguracji, jednak API trzeba zmienić, ale nadal jest to zmiana kodu
  • w przypadku typów złożonych wpisz wewnątrz typów, tj. typy zagnieżdżone (nie można było uzyskać w solr)

Solr:

  • mniej kodu i więcej konfiguracji, a tym samym mniej konserwacji
  • do grupowania wyników podczas zapytań (wiele pracy do osiągnięcia w wyszukiwaniu elastycznym w skrócie, nie prosto)
Robert
źródło
7

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

MetodM
źródło
6

Wyobraź sobie przypadek użycia:

  1. Wiele (100+) małych (10Mb-100Mb, 1000-100000 dokumentów) indeksów wyszukiwania.
  2. Korzystają z nich wiele aplikacji (mikrousług)
  3. Każda aplikacja może korzystać z więcej niż jednego indeksu
  4. Indeks małych rozmiarów, tak. Ale ogromne obciążenie (setki żądań wyszukiwania na sekundę) i żądania są złożone (wiele agregacji, warunki itd.)
  5. Przestoje nie są dozwolone
  6. Wszystko to trwa wiele lat i stale rośnie.

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.

Gmugra
źródło
4

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.

Behzad Qureshi
źródło
7
Dlaczego polecasz Elastic do nowych projektów?
forsberg,
1
Elastyczne wyszukiwanie jest nowe, dlatego wykorzystuje najnowsze technologie / architekturę.
Behzad Qureshi
5
Mógłbym również stworzyć coś nowego, ale tylko dlatego, że używam nowej technologii lub innej architektury, nie znaczy to, że jest lepsza niż to, co jest już na rynku.
Jan Sommer
Uzgodnione, ale jako architekt z pewnością wybierzesz coś lepszego niż to, co jest już na rynku. Moje 2 centy :)
Behzad Qureshi
3

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.

Prakash Ghanshani
źródło
2

Używam tylko wyszukiwania elastycznego. Ponieważ znalazłem solr jest bardzo trudny do uruchomienia. Funkcje wyszukiwania elastycznego:

  1. Łatwy do uruchomienia, bardzo mało ustawień. Nawet początkujący może skonfigurować klaster krok po kroku.
  2. Prosty Restful API wykorzystujący zapytanie NoSQL. I wiele bibliotek językowych dla łatwego dostępu.
  3. Dobry dokument, możesz przeczytać książkę:. Na oficjalnej stronie znajduje się wersja internetowa.
Howardyan
źródło
2

Dodaj zagnieżdżony dokument w solr bardzo złożonym i zagnieżdżonym wyszukiwaniu danych również bardzo złożonym. ale Elastic Search ułatwia dodawanie zagnieżdżonych dokumentów i wyszukiwanie

Chirag
źródło