Lucene

Úvod do Lucene

Úvod do Lucene
V této lekci pochopíme fungování jednoho z nejsilnějších fulltextových vyhledávačů, Apache Lucene. S Apache Lucene můžeme používat rozhraní API, která zveřejňuje v mnoha programovacích jazycích, a vytvářet funkce, které potřebujeme. Lucene je jedním z nejsilnějších motorů, na kterých je Elasticsearch postaven.Než začneme s aplikací, která demonstruje fungování Apache Lucene, pochopíme, jak Lucene funguje a mnoho jeho komponent. Začněme.

Proč je Lucene potřeba?

Hledání je jednou z nejběžnějších operací, které provádíme několikrát denně. Toto vyhledávání může probíhat na více webových stránkách, které existují na webu nebo v hudební aplikaci nebo v úložišti kódu nebo v kombinaci všech těchto. Jeden by si mohl myslet, že jednoduchá relační databáze může také podporovat vyhledávání. Toto je správně. Databáze jako MySQL podporují fulltextové vyhledávání. Ale co webová nebo hudební aplikace nebo úložiště kódů nebo jejich kombinace? Databáze nemůže ukládat tato data do svých sloupců. I kdyby tomu tak bylo, spuštění tak velkého vyhledávání bude trvat nepřijatelně dlouho.

Fulltextový vyhledávač je schopen spustit vyhledávací dotaz na milionech souborů najednou. Rychlost, jakou jsou data v dnešní době ukládána do aplikace, je obrovská. Spuštění fulltextového vyhledávání na tomto druhu objemu dat je obtížný úkol. Je to proto, že informace, které potřebujeme, mohou existovat v jediném souboru z miliard souborů uchovávaných na webu.

Jak Lucene funguje?

Zjevná otázka, která by vás měla napadnout, je, jak je Lucene tak rychlý při spouštění fulltextových vyhledávacích dotazů? Odpověď na to samozřejmě je pomocí indexů, které vytváří. Ale místo toho, aby vytvořil klasický index, Lucene využívá Invertované indexy.

V klasickém rejstříku shromažďujeme pro každý dokument úplný seznam slov nebo výrazů, které dokument obsahuje. V obráceném rejstříku u každého slova ve všech dokumentech ukládáme, jaký dokument a umístění tohoto slova / výrazu najdete na. Jedná se o vysoce standardní algoritmus, díky kterému je vyhledávání velmi snadné. Zvažte následující příklad vytvoření klasického indexu:

Doc1 -> "This", "is", "simple", "Lucene", "sample", "classic", "inverted", "index"
Doc2 -> "Spuštěno", "Elasticsearch", "Ubuntu", "Aktualizovat"
Doc3 -> "RabbitMQ", "Lucene", "Kafka", "", "Spring", "Boot"

Pokud použijeme invertovaný index, budeme mít indexy jako:

This -> (2, 71)
Lucene -> (1, 9), (12,87)
Apache -> (12, 91)
Rámec -> (32, 11)

Invertované indexy se udržují mnohem snadněji. Předpokládejme, že pokud chceme najít Apache podle mých podmínek, budu mít přímé odpovědi s Invertovanými indexy, zatímco s klasickým vyhledáváním poběží na úplných dokumentech, které by nebylo možné spustit ve scénářích v reálném čase.

Lucene workflow

Než bude moci Lucene skutečně vyhledávat data, je třeba provést kroky. Podívejme se na tyto kroky, abychom lépe porozuměli:

Lucene Workflow

Jak je znázorněno na obrázku, v Lucene se to děje:

  1. Lucene je napájen dokumenty a dalšími zdroji dat
  2. U každého dokumentu Lucene nejprve převede tato data na prostý text a poté analyzátory tento zdroj převede na prostý text
  3. Pro každý výraz v prostém textu se vytvoří obrácené indexy
  4. Indexy jsou připraveny k prohledání

Díky tomuto pracovnímu postupu je Lucene velmi silný fulltextový vyhledávač. Ale toto je jediná část, kterou Lucene splňuje. Musíme si tuto práci vykonat sami. Podívejme se na potřebné součásti indexování.

Lucene Components

V této části si popíšeme základní komponenty a základní třídy Lucene používané k vytváření indexů:

Příklad aplikace

K vytvoření ukázkového projektu pro náš příklad použijeme jeden z mnoha Mavenových archetypů. Chcete-li vytvořit projekt, proveďte následující příkaz v adresáři, který budete používat jako pracovní prostor:

mvn archetyp: generate -DgroupId = com.linuxhint.příklad -DartifactId = LH-LuceneExample -DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false

Pokud používáte maven poprvé, bude trvat několik sekund, než se provede generování příkazu, protože maven musí stáhnout všechny požadované pluginy a artefakty, aby mohl generovat úlohu. Takto vypadá výstup projektu:

Nastavení projektu

Jakmile vytvoříte projekt, můžete jej otevřít ve svém oblíbeném IDE. Dalším krokem je přidání příslušných závislostí Maven do projektu. Tady je pom.xml soubor s příslušnými závislostmi:



org.apache.Lucene
lucenové jádro
4.6.0


org.apache.Lucene
lucene-analyzátory-běžné
4.6.0

Nakonec, abychom pochopili všechny JAR, které jsou přidány do projektu, když jsme přidali tuto závislost, můžeme spustit jednoduchý příkaz Maven, který nám umožní vidět kompletní strom závislostí pro projekt, když do něj přidáme některé závislosti. Zde je příkaz, který můžeme použít:

závislost mvn: strom

Když spustíme tento příkaz, zobrazí se nám následující strom závislostí:

Nakonec vytvoříme třídu SimpleIndexer, která běží

balíček com.linuxhint.příklad;
importovat java.io.Soubor;
importovat java.io.FileReader;
importovat java.io.IOException;
import org.apache.Lucene.analýza.Analyzátor;
import org.apache.Lucene.analýza.Standard.StandardAnalyzer;
import org.apache.Lucene.dokument.Dokument;
import org.apache.Lucene.dokument.StoredField;
import org.apache.Lucene.dokument.Textové pole;
import org.apache.Lucene.index.IndexWriter;
import org.apache.Lucene.index.IndexWriterConfig;
import org.apache.Lucene.obchod.FSDirectory;
import org.apache.Lucene.util.Verze;
veřejná třída SimpleIndexer
private static final String indexDirectory = "/ Uživatelé / shubham / někde / LH-LuceneExample / Index";
private static final String dirToBeIndexed = "/ Users / shubham / někde / LH-LuceneExample / src / main / java / com / linuxhint / příklad";
public static void main (String [] args) vyvolá výjimku
File indexDir = nový soubor (indexDirectory);
Soubor dataDir = nový soubor (dirToBeIndexed);
SimpleIndexer indexer = nový SimpleIndexer ();
int numIndexed = indexátor.index (indexDir, dataDir);
Systém.ven.println ("Celkem indexovaných souborů" + numIndexed);

soukromý int index (File indexDir, File dataDir) vyvolá IOException
Analyzátor analyzátor = nový StandardAnalyzer (verze.LUCENE_46);
Konfigurace IndexWriterConfig = nový IndexWriterConfig (verze.LUCENE_46,
analyzátor);
IndexWriter indexWriter = nový IndexWriter (FSDirectory.otevřít (indexDir),
config);
Soubor [] soubory = dataDir.listFiles ();
pro (Soubor f: soubory)
Systém.ven.println ("Indexovací soubor" + f.getCanonicalPath ());
Dokument doc = nový dokument ();
doc.add (nový TextField ("obsah", nový FileReader (f)));
doc.add (new StoredField ("fileName", f.getCanonicalPath ()));
indexWriter.addDocument (doc);

int numIndexed = indexWriter.maxDoc ();
indexWriter.zavřít();
návrat numIndexed;

V tomto kódu jsme právě vytvořili instanci dokumentu a přidali nové pole, které představuje obsah souboru. Tady je výstup, který dostaneme, když spustíme tento soubor:

Indexovací soubor / Uživatelé / shubham / někde / LH-LuceneExample / src / main / java / com / linuxhint / příklad / SimpleIndexer.Jáva
Celkový počet indexovaných souborů 1

V projektu je také vytvořen nový adresář s následujícím obsahem:

Indexová data

Budeme analyzovat, co jsou všechny soubory vytvořené v tomto rejstříku, v dalších lekcích pro Lucene.

Závěr

V této lekci jsme se podívali na to, jak Apache Lucene funguje, a také jsme vytvořili jednoduchý příklad aplikace založené na Maven a java.

Hry Jak nainstalovat League Of Legends na Ubuntu 14.04
Jak nainstalovat League Of Legends na Ubuntu 14.04
Pokud jste fanouškem League of Legends, pak je to pro vás příležitost otestovat běh League of Legends. Všimněte si, že LOL je podporován na PlayOnLinu...
Hry Nainstalujte si nejnovější strategickou hru OpenRA na Ubuntu Linux
Nainstalujte si nejnovější strategickou hru OpenRA na Ubuntu Linux
OpenRA je herní engine Libre / Free Real Time Strategy, který obnovuje rané hry Westwood, jako je klasický Command & Conquer: Red Alert. Distribuované...
Hry Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Emulátor Dolphin vám umožní hrát vybrané hry Gamecube a Wii na osobních počítačích se systémem Linux (PC). Jako volně dostupný herní emulátor s otevř...