Dokument badawczy dotyczący wyboru wyszukiwarki
Wprowadzenie do Elasticsearch*
Elasticsearch to rozproszona wyszukiwarka i analityka działająca w czasie rzeczywistym. Pomaga przetwarzać dane na dużą skalę szybciej niż kiedykolwiek wcześniej.
Może być używany do wyszukiwania pełnotekstowego, strukturalnego wyszukiwania oraz analityki, a oczywiście można łączyć wszystkie trzy elementy.
Elasticsearch to wyszukiwarka oparta na pełnotekstowej wyszukiwarce Apache Lucene™, która jest obecnie najbardziej zaawansowanym i efektywnym, w pełni funkcjonalnym otwartym frameworkiem wyszukiwarczym.
Ale Lucene to tylko framework, a aby w pełni wykorzystać jego funkcje, musisz użyć JAVA i zintegrować Lucene ze swoim programem. Trzeba się dużo nauczyć, żeby zrozumieć, jak to działa, a Lucéna jest naprawdę skomplikowana.
Elasticsearch używa Lucene jako wewnętrznego silnika, ale przy wyszukiwaniu pełnym tekstem wystarczy użyć zunifikowanego API, nie rozumiejąc złożonych zasad działania Lucene.
Oczywiście Elasticsearch nie jest tak prosty jak Lucene, ale także zawiera funkcje wyszukiwania pełnego tekstu, ale także potrafi wykonywać następujące zadania:
- Rozproszone przechowywanie plików w czasie rzeczywistym oraz indeksowanie każdego pola, aby można było je przeszukiwać.
- Rozproszona wyszukiwarka z analityką w czasie rzeczywistym.
- Może skalować się do setek serwerów, aby obsłużyć petabajty danych strukturalnych lub niestrukturalnych.
Dzięki tak wielu funkcjam zintegrowanym w jednym serwerze, możesz łatwo komunikować się z API RESTful ES, zarówno przez klienta, jak i przez dowolny język programowania.
Rozpoczęcie korzystania z Elasticsearch jest bardzo proste. Zawiera wiele bardzo rozsądnych domyślnych zasad, co sprawia, że jest dobrym sposobem dla początkujących, by uniknąć konieczności radzenia sobie ze skomplikowanymi teoriami od razu na początku.
Jest zainstalowany i gotowy do użycia, a przy niewielkich kosztach nauki może być bardzo wydajny.
W miarę jak będziesz się więcej dowiadywać, możesz także korzystać z bardziej zaawansowanych funkcji Elasticsearch, a cały silnik można konfigurować elastycznie. Możesz dostosować własny Elasticsearch do własnych potrzeb.
Przypadki użycia:
- Wikipedia wykorzystuje Elasticsearch do wyszukiwania w pełnym tekście i wyróżniania słów kluczowych, a także do sugestii wyszukiwania, takich jak wyszukiwanie na bieżąco czy did-you-sense.
- The Guardian wykorzystuje Elasticsearch do przetwarzania dzienników odwiedzających, dzięki czemu redaktorzy mogą być informowani o reakcjach opinii publicznej na różne artykuły w czasie rzeczywistym.
- StackOverflow łączy wyszukiwanie w pełnym tekstie z geolokalizacją i istotnymi informacjami, aby zapewnić reprezentację pytań związanych z bardziej podobnymi pytaniami.
- GitHub wykorzystuje Elasticsearch do pobierania ponad 130 miliardów linii kodu.
- Każdego dnia Goldman Sachs wykorzystuje go do indeksowania 5TB danych, a wiele banków inwestycyjnych analizuje ruchy na giełdzie.
Ale Elasticsearch nie jest przeznaczony tylko dla dużych przedsiębiorstw – pomógł także wielu startupom, takim jak DataDog i Klout, poszerzyć ich możliwości.
Zalety i wady Elasticsearch**:
zasługa
- Elasticsearch jest rozproszony. Nie są potrzebne żadne inne komponenty, a dystrybucja odbywa się w czasie rzeczywistym, znanym jako "replikacja push".
- Elasticsearch w pełni obsługuje wyszukiwanie niemal w czasie rzeczywistym z Apache Lucene.
- Obsługa multitenancy nie wymaga specjalnej konfiguracji, natomiast Solr wymaga bardziej zaawansowanych ustawień.
- Elasticsearch wykorzystuje koncepcję Gateway, aby ułatwić tworzenie kopii zapasowych.
- Każdy węzeł tworzy równą strukturę sieciową, a gdy niektóre zawiodły zawodzą, inne są automatycznie przydzielane do pracy w ich miejsce.
niedociągnięcie
- Tylko jeden deweloper (obecna organizacja Elasticsearch na GitHubie to coś więcej, już ma dość aktywnych opiekunów)
- Nie jest wystarczająco automatyczne (nie nadaje się do obecnego nowego API Index Warmup)
O Solr*
Solr (wymawiane "solar") to otwartoźródłowa platforma wyszukiwania korporacyjnego dla projektu Apache Lucene. Główne cechy obejmują wyszukiwanie pełnotekstowe, oznaczanie trafień, wyszukiwanie facetowe, dynamiczne klastry, integrację z bazami danych oraz przetwarzanie tekstu bogatego (np. Word, PDF). Solr jest wysoce skalowalny i zapewnia rozproszone wyszukiwanie oraz replikację indeksów. Solr jest najpopularniejszą wyszukiwarką korporacyjną, a Solr4 dodaje także wsparcie dla NoSQL.
Solr to samodzielny, pełnotekstowy serwer wyszukiwania napisany w Javie, działający na kontenerze serweletowym, takim jak Apache Tomcat lub Jetty. Solr wykorzystuje bibliotekę wyszukiwania Lucene Java jako rdzeń do indeksowania i wyszukiwania w pełnym tekście, a także posiada API HTTP/XML i JSON podobne do REST-u. Potężne możliwości zewnętrznej konfiguracji Solr ułatwiają adaptację do wielu typów aplikacji bez kodowania Java. Solr posiada architekturę wtyczek wspierającą bardziej zaawansowane dostosowywanie.
W wyniku połączenia projektów Apache Lucene i Apache Solr w 2010 roku, oba projekty zostały stworzone i wdrożone przez ten sam zespół deweloperski Apache Software Foundation. Jeśli chodzi o technologię czy produkty, Lucene/Solr czy Solr/Lucene są takie same.
Zalety i wady Solr:
zasługa
- Solr ma większą i bardziej dojrzałą społeczność użytkowników, deweloperów i współtwórców.
- Wspieraj dodawanie indeksów w różnych formatach, takich jak HTML, PDF, formaty oprogramowania Microsoft Office oraz formaty tekstu zwykłego, np. JSON, XML, CSV itd.
- Solr jest stosunkowo dojrzały i stabilny.
- Wyszukiwanie podczas indeksowania nie jest brane pod uwagę, a szybkość jest szybsza.
niedociągnięcie
- Gdy indeks zostanie ustanowiony, efektywność wyszukiwania spada, a efektywność wyszukiwania indeksów w czasie rzeczywistym nie jest wysoka.
Elasticsearch vs Solr*
Solr jest szybszy, po prostu wyszukując istniejące dane.
Podczas indeksowania w czasie rzeczywistym Solr powoduje blokowanie IO i słabą wydajność zapytań, co Elasticsearch wyraźnie przewodzi.
Wraz ze wzrostem ilości danych efektywność wyszukiwania Solr spada, podczas gdy Elasticsearch nie zmienia się znacząco.
Podsumowując, architektura Solr nie nadaje się do zastosowań wyszukiwania w czasie rzeczywistym.
Testy produkcyjne w rzeczywistym*
Poniższy rysunek pokazuje 50-krotny wzrost średniej szybkości zapytań po przejściu z Solr na Elasticsearch.
Podsumowanie porównania Elasticsearch vs Solr
- Oba są łatwe w instalacji;
- Solr wykorzystuje Zookeeper do zarządzania rozproszonego, podczas gdy Elasticsearch posiada rozproszone zarządzanie orkiestracją;
- Solr obsługuje więcej formatów danych, podczas gdy Elasticsearch obsługuje tylko formaty plików JSON;
- Solr oficjalnie oferuje więcej funkcji, podczas gdy sam Elasticsearch skupia się bardziej na podstawowych funkcjach, a zaawansowane funkcje są głównie dostarczane przez wtyczki firm trzecich.
- Solr przewyższa Elasticsearch w tradycyjnych aplikacjach wyszukiwania, ale jest znacznie mniej wydajny niż Elasticsearch w obsłudze aplikacji wyszukiwania w czasie rzeczywistym.
- Solr jest potężnym rozwiązaniem dla tradycyjnych aplikacji wyszukiwania, ale Elasticsearch lepiej sprawdza się w rozwijających się aplikacjach wyszukiwania czasu rzeczywistego.
Inne otwartoźródłowe rozwiązania wyszukiwarek oparte na Lucene*
1: Używaj Lucene bezpośrednio
Uwaga: Lucene to biblioteka wyszukiwania JAVA, która sama w sobie nie jest kompletnym rozwiązaniem i wymaga dodatkowego wysiłku rozwojowego.
Zalety: Dojrzałe rozwiązanie z wieloma udanymi sprawami. Projekty Apache na najwyższym poziomie, które nadal szybko się rozwijają. Duża i aktywna społeczność deweloperów, duża liczba deweloperów. To po prostu biblioteka klas, z wystarczającą przestrzenią do personalizacji i optymalizacji: po prostym dostosowaniu może spełnić większość najczęstszych potrzeb; Zoptymalizowany do obsługi 1 miliarda+ wyszukiwań.
Wady: Wymaga dodatkowego wysiłku deweloperskiego. Cała skala, dystrybucja, niezawodność itd. musi być implementowana samodzielnie; W trybie nierzeczywistym istnieje opóźnienie między indeksowaniem a wyszukiwaniem, dlatego skalowalność obecnego schematu wyszukiwania "Lucene Near Real Time" wymaga dalszej poprawy
Logowanie do linku jest widoczne.
2: Katta
Uwaga: Oparte na Lucene wsparcie rozproszone, skalowalne, odporne na błędy i niemal w czasie rzeczywistym schemat wyszukiwania.
Zalety: Dystrybucja od razu z pudełka z Hadoop. Posiada mechanizm skalowania i odporności na błędy.
Wady: To tylko rozwiązanie wyszukiwania, a indeksowanie trzeba zaimplementować samodzielnie. W zakresie funkcji wyszukiwania realizowane są tylko najbardziej podstawowe potrzeby. Jest mniej historii sukcesu, a dojrzałość projektu jest nieco niższa. Ponieważ musi wspierać dystrybucję, trudno będzie dostosować go do skomplikowanych wymagań zapytań.
Logowanie do linku jest widoczne.
3: Wkład/indeks Hadoop
Uwaga: Tryb Map/Reduk, rozproszone rozwiązanie indeksowania, może być używany z Kattą.
Zalety: Indeksowanie rozproszone i skalowalność.
Wady: Tylko schemat indeksowania, nie implementacja wyszukiwania. Działa w trybie wsadowym, ale słabo obsługuje wyszukiwanie w czasie rzeczywistym.
Logowanie do linku jest widoczne.
4: Rozwiązanie open-source LinkedIn
Opis: Szereg rozwiązań opartych na Lucene, w tym Zoie do wyszukiwania niemal w czasie rzeczywistym, Bobo do wyszukiwania facetów, Decomposer do algorytmów uczenia maszynowego, Krati do repozytoriów podsumowań, Sensei do opakowania schematów baz danych i inne
Zalety: Sprawdzone rozwiązanie wspierające rozproszone, skalowalne i bogate funkcje
Wady: Zbyt bliskie powiązania z firmą LinkedIn i słaba możliwość personalizacji
Logowanie do linku jest widoczne.
5: Lucandra
Uwaga: Na podstawie Lucene, indeks ten istnieje w bazie danych Cassandra
Zalety: Opowiedz o zaletach Cassandry
Wady: Opowiedz o wadach Cassandry. Poza tym to tylko demo i nie zostało to mocno zweryfikowane
Logowanie do linku jest widoczne.
6:HBasene
Uwaga: Na podstawie Lucene, indeks ten istnieje w bazie danych HBase
Korzyści: Opowiedz o zaletach HBase
Wady: Opowiedz o wadach HBase. Ponadto w implementacji terminy lucene są przechowywane w wierszach, ale listy publikujące odpowiadające każdemu terminowi są przechowywane jako kolumny. Wraz ze wzrostem liczby list publikujących dla jednego terminu, szybkość zapytania znacznie ulegnie zmianie
Logowanie do linku jest widoczne.
7: Xunsearch
Uwaga: Xunsearch przyjmuje uporządkowany układ hierarchiczny, obejmujący usługi back-end i pakiety programistyczne front-end, z wyraźnymi hierarchiami i brakiem przecięcia. Backend to demon napisany w C/C++, natomiast frontend korzysta z PHP, najpopularniejszego języka skryptowego, który jest wygodniejszy dla projektów wyszukiwania webowego. Szczegóły można znaleźć w sekcji Projektowanie architektury.
Logowanie do linku jest widoczne.
|