Lucene

Ievads Lucene

Ievads Lucene
Šajā nodarbībā mēs sapratīsim, kā darbojas viena no jaudīgākajām pilna teksta meklētājprogrammām Apache Lucene. Izmantojot Apache Lucene, mēs varam izmantot daudzos programmēšanas valodās pieejamos API un veidot nepieciešamās funkcijas. Lucene ir viens no jaudīgākajiem dzinējiem, uz kura ir izveidota Elasticsearch.Pirms sākam ar lietojumprogrammu, kas demonstrē Apache Lucene darbību, mēs sapratīsim, kā Lucene darbojas un daudzas tās sastāvdaļas. Sāksim.

Kāpēc Lucene ir vajadzīga?

Meklēšana ir viena no visbiežāk izmantotajām operācijām, ko veicam vairākas reizes dienā. Šis meklējums var notikt vairākās tīmekļa lapās, kas pastāv tīmeklī, mūzikas lietojumprogrammā vai kodu krātuvē, vai visu šo kombinācijā. Varētu domāt, ka vienkārša relāciju datu bāze var arī atbalstīt meklēšanu. Tas ir pareizi. Tādas datu bāzes kā MySQL atbalsta pilna teksta meklēšanu. Bet ko par tīmekli vai mūzikas lietojumprogrammu, vai kodu krātuvi vai visu to kombināciju? Datu bāze nevar saglabāt šos datus savās slejās. Pat ja tas tā notika, tikpat ilgs laiks būs nepieciešams, lai palaistu meklējumus.

Pilna teksta meklētājprogramma spēj izpildīt meklēšanas vaicājumu miljoniem failu vienlaikus. Ātrums, kādā šodien dati tiek saglabāti lietojumprogrammā, ir milzīgs. Palaist pilna teksta meklēšanu šāda veida datu apjomā ir grūts uzdevums. Tas ir tāpēc, ka mums vajadzīgā informācija var sastāvēt no viena faila no miljardiem tīmeklī saglabāto failu.

Kā darbojas Lucene?

Acīmredzams jautājums, kas jums būtu jāienāk prātā, ir, kā Lucene tik ātri izpilda pilna teksta meklēšanas vaicājumus? Atbilde uz to, protams, ir ar izveidoto indeksu palīdzību. Bet tā vietā, lai izveidotu klasisko indeksu, Lucene izmanto Apgrieztie indeksi.

Klasiskajā rādītājā katram dokumentam mēs apkopojam pilnu vārdu vai vārdu sarakstu, kas ir dokumentā. Apgrieztā rādītājā katram vārdam visos dokumentos mēs glabājam, kādā dokumentā un pozīcijā šo vārdu / terminu var atrast. Šis ir augsta līmeņa algoritms, kas ļoti atvieglo meklēšanu. Apsveriet šādu klasiskā indeksa izveides piemēru:

Doc1 -> "This", "is", "simple", "Lucene", "sample", "classic", "inverted", "index"
Doc2 -> "Darbojas", "Elasticsearch", "Ubuntu", "Atjaunināt"
Doc3 -> "RabbitMQ", "Lucene", "Kafka", "", "Pavasaris", "Boot"

Ja izmantosim apgriezto indeksu, mums būs šādi indeksi:

Šis -> (2, 71)
Lucēna -> (1, 9), (12,87)
Apache -> (12, 91)
Sistēma -> (32, 11)

Apgrieztus indeksus ir daudz vieglāk uzturēt. Pieņemsim, ka, ja mēs vēlamies atrast Apache manos terminos, man būs tūlītējas atbildes ar apgrieztiem indeksiem, turpretī klasiskā meklēšana darbosies ar pilnīgiem dokumentiem, kurus, iespējams, nebija iespējams izpildīt reāllaika scenārijos.

Lucene darbplūsma

Pirms Lucene faktiski var meklēt datus, tai jāveic darbības. Vizualizēsim šīs darbības, lai labāk izprastu:

Lucene darbplūsma

Kā parādīts diagrammā, Lucene notiek šādi:

  1. Lucene tiek padota ar dokumentiem un citiem datu avotiem
  2. Katram dokumentam Lucene vispirms pārveido šos datus par vienkāršu tekstu, bet pēc tam Analyzers pārvērš šo avotu par vienkāršu tekstu
  3. Katram vārdam vienkāršajā tekstā tiek izveidoti apgrieztie indeksi
  4. Indeksi ir gatavi meklēšanai

Ar šo darbplūsmu Lucene ir ļoti spēcīga pilna teksta meklētājprogramma. Bet tikai šo daļu Lucene izpilda. Mums pašiem jāveic darbs. Apskatīsim nepieciešamos indeksēšanas komponentus.

Lucene komponenti

Šajā sadaļā mēs aprakstīsim pamatkomponentus un Lucene pamatklases, kas izmantotas indeksu izveidošanai:

Lietojumprogrammas piemērs

Mēs izmantosim vienu no daudzajiem Maven arhetipiem, lai izveidotu sava parauga projektu. Lai izveidotu projektu, izpildiet šādu komandu direktorijā, kuru izmantosiet kā darbvietu:

mvn arhetips: ģenerēt -DgroupId = com.linuxhint.piemērs -DartifactId = LH-LuceneExample -DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false

Ja jūs pirmo reizi izmantojat maven, ģenerēšanas komandas izpilde prasīs dažas sekundes, jo maven ir jālejupielādē visi nepieciešamie spraudņi un artefakti, lai izveidotu ģenerēšanas uzdevumu. Lūk, kā izskatās projekta rezultāts:

Projekta iestatīšana

Kad esat izveidojis projektu, droši atveriet to savā iecienītajā IDE. Nākamais solis ir projektam pievienot atbilstošas ​​Maven Dependencies. Šeit ir pom.xml fails ar atbilstošajām atkarībām:



org.apache.lucēns
lucēna kodols
4.6.0


org.apache.lucēns
kopējie lucēna analizatori
4.6.0

Visbeidzot, lai saprastu visus JAR, kas tiek pievienoti projektam, pievienojot šo atkarību, mēs varam palaist vienkāršu Maven komandu, kas ļauj mums redzēt pilnu projekta Atkarības koku, kad tam pievienojam dažas atkarības. Šeit ir komanda, kuru mēs varam izmantot:

mvn atkarība: koks

Palaidot šo komandu, tā parādīs mums šādu atkarības koku:

Visbeidzot, mēs izveidojam SimpleIndexer klasi, kas darbojas

pakete com.linuxhint.piemērs;
ievest java.io.Fails;
ievest java.io.FileReader;
ievest java.io.IOException;
importēt org.apache.lucēns.analīze.Analizators;
importēt org.apache.lucēns.analīze.standarta.StandardAnalyzer;
importēt org.apache.lucēns.dokumentu.Dokuments;
importēt org.apache.lucēns.dokumentu.StoredField;
importēt org.apache.lucēns.dokumentu.TextField;
importēt org.apache.lucēns.indekss.IndexWriter;
importēt org.apache.lucēns.indekss.IndexWriterConfig;
importēt org.apache.lucēns.veikalā.FSD direktorijs;
importēt org.apache.lucēns.util.Versija;
publiskā klase SimpleIndexer
privāta statiska galīgā virknes indexDirectory = "/ Lietotāji / šubhems / kaut kur / LH-LuceneExample / Index";
privāta statiska gala virkne dirToBeIndexed = "/ Lietotāji / shubham / kaut kur / LH-LuceneExample / src / main / java / com / linuxhint / example";
public static void main (String [] args) izmet izņēmumu
File indexDir = jauns fails (indexDirectory);
File dataDir = jauns fails (dirToBeIndexed);
SimpleIndexer indeksētājs = jauns SimpleIndexer ();
int numIndexed = indeksētājs.indekss (indexDir, dataDir);
Sistēma.ārā.println ("Kopējais indeksēto failu skaits" + numIndexed);

privāts int indekss (File indexDir, File dataDir) iemet IOException
Analizatora analizators = jauns StandardAnalyzer (versija.LUCENE_46);
IndexWriterConfig config = new IndexWriterConfig (versija.LUCENE_46,
analizators);
IndexWriter indexWriter = jauns IndexWriter (FSD Directory.atvērt (indexDir),
config);
File [] faili = dataDir.listFiles ();
domēnam (fails f: faili)
Sistēma.ārā.println ("Faila indeksēšana" + f.getCanonicalPath ());
Dokuments doc = jauns dokuments ();
doc.pievienot (jauns TextField ("saturs", jauns FileReader (f)));
doc.pievienot (jauns StoredField ("fileName", f.getCanonicalPath ()));
indexWriter.addDocument (doc);

int numIndexed = indexWriter.maxDoc ();
indexWriter.aizvērt ();
atgriezt numIndexed;

Šajā kodā mēs tikko izveidojām dokumenta instanci un pievienojām jaunu lauku, kas apzīmē faila saturu. Lūk, izeja, kuru mēs iegūstam, palaižot šo failu:

Indeksēšanas fails / Lietotāji / shubham / kaut kur / LH-LuceneExample / src / main / java / com / linuxhint / example / SimpleIndexer.java
Indeksēto failu kopskaits 1

Turklāt projekta ietvaros tiek izveidots jauns direktorijs ar šādu saturu:

Indeksa dati

Mēs analizēsim, kādi visi faili ir izveidoti šajā rādītājā, vēl vairāk mācību stundu par Lucene.

Secinājums

Šajā nodarbībā mēs apskatījām, kā darbojas Apache Lucene, un mēs izveidojām arī vienkāršu piemēru, kura pamatā bija Maven un java.

5 labākās arkādes spēles Linux
Mūsdienās datori ir nopietnas mašīnas, kuras izmanto spēlēšanai. Ja jūs nevarat iegūt jauno augsto rezultātu, jūs zināt, ko es domāju. Šajā ierakstā j...
Cīņa par Vesnotu 1.13.6 Izlaista attīstība
Cīņa par Vesnotu 1.13.6 izlaists pagājušajā mēnesī, ir sestais izstrādes izlaidums 1.13.x sērija un tā nodrošina vairākus uzlabojumus, īpaši lietotāja...
Kā instalēt League of Legends operētājsistēmā Ubuntu 14.04
Ja jūs esat League of Legends fans, tad šī ir iespēja jums izmēģināt League of Legends. Ņemiet vērā, ka LOL tiek atbalstīts PlayOnLinux, ja esat Linux...