Lucene

Introduktion til Lucene

Introduktion til Lucene
I denne lektion vil vi forstå funktionen bag en af ​​de mest kraftfulde søgemaskiner i fuldtekst, Apache Lucene. Med Apache Lucene kan vi bruge de API'er, den udsætter, på mange programmeringssprog og opbygge de funktioner, vi har brug for. Lucene er en af ​​de mest kraftfulde motorer, som Elasticsearch er bygget på.Før vi starter med en applikation, der demonstrerer, hvordan Apache Lucene fungerer, vil vi forstå, hvordan Lucene fungerer og mange af dens komponenter. Lad os komme igang.

Hvorfor er der brug for Lucene?

Søgning er en af ​​de mest almindelige operationer, vi udfører flere gange om dagen. Denne søgning kan være på tværs af flere websider, der findes på Internettet eller et musikapplikation eller et kodelager eller en kombination af alle disse. Man tror måske, at en simpel relationsdatabase også kan understøtte søgning. Det er rigtigt. Databaser som MySQL understøtter søgning i fuld tekst. Men hvad med internettet eller et musikprogram eller et kodelager eller en kombination af alle disse? Databasen kan ikke gemme disse data i sine kolonner. Selvom det gjorde det, vil det tage en uacceptabel tid at køre søgningen så stort.

En søgemaskine i fuld tekst er i stand til at køre en søgeforespørgsel på millioner af filer på én gang. Den hastighed, hvormed data lagres i en applikation i dag, er enorm. At køre fuldtekstsøgning på denne type datamængde er en vanskelig opgave. Dette skyldes, at de oplysninger, vi har brug for, muligvis findes i en enkelt fil ud af milliarder af filer, der er gemt på nettet.

Hvordan Lucene fungerer?

Det åbenlyse spørgsmål, som du skal tænke på, er, hvordan er Lucene så hurtig til at køre fuldtekst-søgeforespørgsler? Svaret på dette er naturligvis ved hjælp af indekser, det skaber. Men i stedet for at oprette et klassisk indeks bruger Lucene det Omvendte indekser.

I et klassisk indeks samler vi for hvert dokument den fulde liste over ord eller udtryk, dokumentet indeholder. I et omvendt indeks gemmer vi for hvert ord i alle dokumenter hvilket dokument og position dette ord / udtryk kan findes på. Dette er en høj standard algoritme, der gør søgningen meget let. Overvej følgende eksempel på oprettelse af et klassisk indeks:

Doc1 -> "Dette", "er", "simpelt", "Lucene", "prøve", "klassisk", "omvendt", "indeks"
Doc2 -> "Running", "Elasticsearch", "Ubuntu", "Update"
Doc3 -> "RabbitMQ", "Lucene", "Kafka", "", "Spring", "Boot"

Hvis vi bruger inverteret indeks, har vi indeks som:

Dette -> (2, 71)
Lucene -> (1, 9), (12,87)
Apache -> (12, 91)
Framework -> (32, 11)

Inverterede indekser er meget lettere at vedligeholde. Antag, at hvis vi vil finde Apache i mine vilkår, har jeg straks svar med inverterede indekser, mens klassisk søgning vil køre på komplette dokumenter, som måske ikke har været muligt at køre i realtidsscenarier.

Lucene-arbejdsgang

Før Lucene rent faktisk kan søge i dataene, skal den udføre trin. Lad os visualisere disse trin for en bedre forståelse:

Lucene Workflow

Som vist i diagrammet er dette, hvad der sker i Lucene:

  1. Lucene får dokumenterne og andre datakilder
  2. For hvert dokument konverterer Lucene først disse data til almindelig tekst, og derefter konverterer analysatorerne denne kilde til almindelig tekst
  3. For hvert udtryk i almindelig tekst oprettes de omvendte indekser
  4. Indekserne er klar til at blive søgt

Med denne arbejdsgang er Lucene en meget stærk søgemaskine i fuldtekst. Men dette er den eneste del, Lucene opfylder. Vi er nødt til at udføre arbejdet selv. Lad os se på de komponenter, der er nødvendige for indeksering.

Lucene-komponenter

I dette afsnit beskriver vi de grundlæggende komponenter og de grundlæggende Lucene-klasser, der bruges til at oprette indekser:

Eksempel på anvendelse

Vi bruger en af ​​de mange Maven-arketyper til at oprette et prøveprojekt til vores eksempel. For at oprette projektet skal du udføre følgende kommando i en mappe, som du vil bruge som arbejdsområde:

mvn arketype: generer -DroupId = com.linuxhint.eksempel -DartifactId = LH-Lucene Eksempel -DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false

Hvis du kører maven for første gang, vil det tage et par sekunder at udføre genereringskommandoen, fordi maven er nødt til at downloade alle de nødvendige plugins og artefakter for at gøre genereringsopgaven. Sådan ser projektudgangen ud:

Projektopsætning

Når du har oprettet projektet, er du velkommen til at åbne det i din foretrukne IDE. Næste trin er at tilføje passende Maven-afhængigheder til projektet. Her er pom.xml-fil med de relevante afhængigheder:



org.apache.lucene
lucenkerne
4.6.0


org.apache.lucene
lucene-analysatorer-fælles
4.6.0

Endelig, for at forstå alle de JAR, der føjes til projektet, når vi tilføjede denne afhængighed, kan vi køre en simpel Maven-kommando, der giver os mulighed for at se et komplet afhængighedstræ for et projekt, når vi tilføjer nogle afhængigheder til det. Her er en kommando, som vi kan bruge:

mvn afhængighed: træ

Når vi kører denne kommando, viser den os følgende afhængighedstræ:

Endelig opretter vi en SimpleIndexer-klasse, der kører

pakke com.linuxhint.eksempel;
importer java.io.Fil;
importer java.io.FileReader;
importer java.io.IOUndtagelse;
importorg.apache.lucene.analyse.Analysator;
importorg.apache.lucene.analyse.standard.Standardanalysator;
importorg.apache.lucene.dokument.Dokument;
importorg.apache.lucene.dokument.Opbevaret felt;
importorg.apache.lucene.dokument.Tekstfelt;
importorg.apache.lucene.indeks.IndexWriter;
importorg.apache.lucene.indeks.IndexWriterConfig;
importorg.apache.lucene.butik.FSDirectory;
importorg.apache.lucene.util.Version;
offentlig klasse SimpleIndexer
privat statisk endelig String indexDirectory = "/ Brugere / shubham / et sted / LH-Lucene Eksempel / Indeks";
privat statisk endelig String dirToBeIndexed = "/ Brugere / shubham / et eller andet sted / LH-LuceneExample / src / main / java / com / linuxhint / eksempel";
offentlig statisk ugyldigt hoved (String [] args) kaster Undtagelse
File indexDir = ny fil (indexDirectory);
File dataDir = ny fil (dirToBeIndexed);
SimpleIndexer indexer = ny SimpleIndexer ();
int numIndexed = indekser.indeks (indexDir, dataDir);
System.ud.println ("Samlet antal filer indekseret" + numIndexed);

privat int-indeks (File indexDir, File dataDir) kaster IOException
Analysatoranalysator = ny StandardAnalyzer (version.LUCENE_46);
IndexWriterConfig config = ny IndexWriterConfig (version.LUCENE_46,
analysator);
IndexWriter indexWriter = ny IndexWriter (FSDirectory.åben (indexDir),
config);
Fil [] filer = dataDir.listFiles ();
for (Fil f: filer)
System.ud.println ("Indekseringsfil" + f.getCanonicalPath ());
Dokument doc = nyt dokument ();
dok.tilføj (nyt TextField ("indhold", ny FileReader (f)));
dok.tilføj (nyt StoredField ("filnavn", f.getCanonicalPath ()));
indexWriter.addDocument (doc);

int numIndexed = indexWriter.maxDoc ();
indexWriter.tæt();
return numIndexed;

I denne kode oprettede vi netop en dokumentinstans og tilføjede et nyt felt, der repræsenterer filindholdet. Her er det output, vi får, når vi kører denne fil:

Indekseringsfil / Brugere / shubham / et eller andet sted / LH-Lucene Eksempel / src / main / java / com / linuxhint / eksempel / SimpleIndexer.java
I alt indekserede filer 1

Der oprettes også en ny mappe inde i projektet med følgende indhold:

Indeksdata

Vi analyserer, hvad alle filer oprettes i dette indeks i flere lektioner, der kommer på Lucene.

Konklusion

I denne lektion kiggede vi på, hvordan Apache Lucene fungerer, og vi lavede også et simpelt eksempelapplikation, der var baseret på Maven og java.

Mus Microsoft Sculpt Touch Wireless Mouse Review
Microsoft Sculpt Touch Wireless Mouse Review
Jeg har for nylig læst om Microsoft Sculpt Touch trådløs mus og besluttede at købe den. Efter at have brugt det et stykke tid besluttede jeg at dele m...
Mus AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
AppyMouse pegefelt på skærmen og musemarkør til Windows-tablets
Tabletbrugere savner ofte musemarkøren, især når de er vante til at bruge bærbare computere. Touchscreen-smartphones og tablets har mange fordele, og ...
Mus Midterste museknap fungerer ikke i Windows 10
Midterste museknap fungerer ikke i Windows 10
Det midterste museknap hjælper dig med at rulle gennem lange websider og skærme med en masse data. Hvis det stopper, vil du ende med at bruge tastatur...