Jaka jest różnica między Lucene i Elasticsearch

151

Wiem, że ElasticSearch jest oparty na Apache Lucene, ale chcę poznać istotne różnice między nimi.

Satish Madiwal
źródło

Odpowiedzi:

239

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

  1. Elasticsearch jest zbudowany na Lucene i zapewnia oparty na JSON interfejs API REST w celu odwoływania się do funkcji Lucene.
  2. Elasticsearch zapewnia system rozproszony na szczycie Lucene . System rozproszony nie jest czymś, o czym Lucene jest świadomy lub do czego został stworzony. Elasticsearch zapewnia taką abstrakcję rozproszonej struktury.
  3. Elasticsearch zapewnia inne funkcje pomocnicze, takie jak pula wątków, kolejki, interfejs API do monitorowania węzłów / klastrów, interfejs API do monitorowania danych, zarządzanie klastrami itp.
Vineeth Mohan
źródło
1
Czy istnieje różnica między nimi w zakresie magazynu danych?
AlikElzin-kilaka,
A co z magazynem danych?
Rookian
11
Nie jestem pewien, czy to odpowiada na Twoje pytanie dotyczące DataStore, ale każdy węzeł Elasticsearch zawiera fragmenty. Pojedynczy indeks Elasticsearch jest rozłożony na węzły przy użyciu fragmentów. Każdy fragment zawiera część dokumentów w indeksie Elasticsearch. Każdy z tych odłamków jest instancją Lucene. Tak więc u podstaw wszystkie dane są przechowywane w Lucene, a Elasticsearch zarządza interakcjami.
Airn5475
35

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 schemanie muszą być wcześniej definiowane. Podczas indeksowania danych, Flexiblesearch może automatycznie tworzyć schemat w czasie wykonywania, jak Magic.

fgul
źródło
1

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:

  • REST API
  • zapytanie DSL
  • system rozproszony (sharding, replikacja, zarządzanie klastrem)
  • aspekty / agregacje
  • dodatkowe funkcje do powszechnego użytku (np. przetwarzanie pozyskiwania ) i zarządzania (interfejsy API do monitorowania odpowiednich metryk , tworzenia kopii zapasowych i przywracania itp.)
Radu Gheorghe
źródło
0

Dodam do dyskusji inny punkt widzenia.

Indeks Elasticsearch kontra indeks Lucene.

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.


Bonus - indeks Lucene jako indeks odwrócony

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.


(Przypomnienie) Jak doszliśmy od odłamka do terminu?

(1) Shard to katalog plików, który zawiera dokumenty.
(2) Dokument to sekwencja pól.
(3) Pole to nazwana sekwencja terminów.

RtmY
źródło