Wiem, że ElasticSearch jest oparty na Apache Lucene, ale chcę poznać istotne różnice między nimi.
Wiem, że ElasticSearch jest oparty na Apache Lucene, ale chcę poznać istotne różnice między nimi.
Odpowiedzi:
Lucene to biblioteka Java . Możesz dołączyć go do swojego projektu i odwoływać się do jego funkcji za pomocą wywołań funkcji.
Elasticsearch jest JSON oparte Ukazuje , serwer WWW zbudowany nad Lucene. Chociaż to Lucene wykonuje rzeczywistą pracę pod spodem, Elasticsearch zapewnia nam wygodną warstwę nad Lucene. Każdy fragment utworzony w Elasticsearch jest oddzielną instancją Lucene. Podsumowując
Oprócz słów @Vineeth Mohan :
Wysoka dostępność: Elasticsearch jest dystrybuowany, dzięki czemu może zarządzać replikacją danych, co oznacza posiadanie wielu kopii danych w klastrze. Zapewnia to wysoką dostępność.
Potężne zapytanie DSL : Elasticsearch oferuje nam interfejs JSON do czytania i pisania zapytań na szczycie Lucene. Dzięki Elasticsearch możesz pisać złożone zapytania bez znajomości składni Lucene.
Bez schematu (bez schematu): Pola (nazwa, pary wartości) dla schema
nie muszą być wcześniej definiowane. Podczas indeksowania danych, Flexiblesearch może automatycznie tworzyć schemat w czasie wykonywania, jak Magic.
Odpowiem z perspektywy użytkowania.
Lucene to biblioteka wyszukiwarek . Chciałbyś go użyć do zbudowania własnej wyszukiwarki: albo nowego konkurenta Elasticsearch lub Solr, albo czegoś wąskiego dla twojego przypadku użycia (np. Analiza tekstu).
Elasticsearch to wyszukiwarka . Większość ludzi używa go do agregacji logów, wyszukiwania produktów lub ich wariantu (np. Analizy mediów społecznościowych lub znajdowania odpowiednich osób dla niektórych kryteriów wyszukiwania). Jest zbudowany na Lucene, więc eksponuje większość (choć nie wszystkie) jego funkcji . Dodaje też wiele do góry, a przede wszystkim:
Dodam do dyskusji inny punkt widzenia.
Indeks Elasticsearch jest fragment dokumentów podobnie jak bazy danych składa się z tabel w relacyjnej świata.
Aby osiągnąć skalowanie, rozkładamy indeksy Elasticsearch na wiele fizycznych węzłów / serwerów.
W tym celu dzielimy indeksy Elasticsearch na mniejsze jednostki zwane shardami .
Pytanie: Jaki jest związek z indeksem Lucene?
Jeśli chcemy wyszukać konkretny termin (na przykład: „ Ciasto ” lub „ Ciasteczko ”), będziemy musieli przejrzeć każdy fragment i poszukać go (odłóżmy na bok, w jaki sposób fragmenty są lokalizowane i replikowane w każdym węźle).
Ta operacja zajmie dużo czasu - dlatego musimy użyć wydajnej struktury danych do tego wyszukiwania - w tym miejscu do gry wkracza indeks Lucene .
Każdy fragment Elasticsearch jest oparty na strukturze indeksu Lucene i przechowuje statystyki dotyczące terminów, aby zwiększyć wydajność wyszukiwania opartego na terminach.
(!) Jest to ciche i mylące ze względu na słowo „index” i fakt, że fragment Elasticsearch jest częścią indeksu Elasticsearch, ALE jest oparty na strukturze danych indeksu Lucene.
Jak widać na poniższym przykładzie, indeks Lucene przechowuje treść oryginalnego dokumentu oraz dodatkowe informacje, takie jak słownik terminów i częstotliwości terminów, które zwiększają wydajność wyszukiwania:
Term Document Frequency
Cake doc_id_1, doc_id_8 4 (2 in doc_id_1, 2 in doc_id_8)
Cookie doc_id_1, doc_id_6 3 (2 in doc_id_1, 1 in doc_id_6)
Spaghetti doc_id_12 1 (1 in doc_id_12)
Indeks Lucene należy do rodziny indeksów znanej jako indeks odwrócony. Dzieje się tak, ponieważ może ona na przykład wymieniać dokumenty, które go zawierają.
Jest to odwrotność naturalnej zależności, w której dokumenty wymieniają terminy.
(1) Shard to katalog plików, który zawiera dokumenty.
(2) Dokument to sekwencja pól.
(3) Pole to nazwana sekwencja terminów.