Lucene

Pengenalan kepada Lucene

Pengenalan kepada Lucene
Dalam pelajaran ini, kita akan memahami cara kerja salah satu enjin carian teks penuh yang paling kuat, Apache Lucene. Dengan Apache Lucene, kita dapat menggunakan API yang dipaparkannya dalam banyak bahasa pengaturcaraan dan membina ciri yang kita perlukan. Lucene adalah salah satu enjin paling kuat di mana Elasticsearch dibina.Sebelum kita memulakan dengan aplikasi yang menunjukkan cara kerja Apache Lucene, kita akan memahami bagaimana Lucene berfungsi dan banyak komponennya. Mari kita mulakan.

Mengapa Lucene diperlukan?

Pencarian adalah salah satu operasi yang paling biasa kita lakukan berkali-kali sehari. Pencarian ini boleh merangkumi beberapa halaman web yang terdapat di Web atau aplikasi Muzik atau repositori kod atau gabungan semua ini. Seseorang mungkin berpendapat bahawa pangkalan data hubungan sederhana juga dapat menyokong pencarian. Ini adalah betul. Pangkalan data seperti MySQL menyokong carian teks penuh. Tetapi bagaimana dengan Web atau aplikasi Muzik atau repositori kod atau gabungan semua ini? Pangkalan data tidak dapat menyimpan data ini di lajurnya. Walaupun berjaya, ia memerlukan masa yang tidak dapat diterima untuk menjalankan carian sebanyak ini.

Mesin carian teks penuh mampu menjalankan pertanyaan carian pada berjuta-juta fail sekaligus. Kelajuan di mana data disimpan dalam aplikasi hari ini sangat besar. Menjalankan carian teks penuh pada jumlah data seperti ini adalah tugas yang sukar. Ini kerana maklumat yang kita perlukan mungkin ada dalam satu fail daripada berbilion fail yang disimpan di web.

Bagaimana Lucene berfungsi?

Soalan jelas yang harus anda fikirkan adalah, bagaimana Lucene begitu pantas dalam menjalankan pertanyaan carian teks penuh? Jawapan untuk ini, tentu saja, adalah dengan bantuan indeks yang dihasilkannya. Tetapi bukannya membuat indeks klasik, Lucene memanfaatkan Indeks Terbalik.

Dalam indeks klasik, untuk setiap dokumen, kami mengumpulkan senarai penuh perkataan atau istilah yang terdapat dalam dokumen tersebut. Dalam indeks terbalik, untuk setiap kata dalam semua dokumen, kami menyimpan dokumen apa dan kedudukan kata / istilah ini dapat ditemukan di. Ini adalah algoritma standard tinggi yang menjadikan carian sangat mudah. Pertimbangkan contoh berikut untuk membuat indeks klasik:

Doc1 -> "Ini", "adalah", "sederhana", "Lucene", "sampel", "klasik", "terbalik", "indeks"
Doc2 -> "Running", "Elasticsearch", "Ubuntu", "Update"
Doc3 -> "RabbitMQ", "Lucene", "Kafka", "", "Spring", "Boot"

Sekiranya kita menggunakan indeks terbalik, kita akan mempunyai indeks seperti:

Ini -> (2, 71)
Lucene -> (1, 9), (12,87)
Apache -> (12, 91)
Rangka Kerja -> (32, 11)

Indeks terbalik jauh lebih senang dijaga. Andaikan jika kita ingin mencari Apache dalam istilah saya, saya akan mendapat jawapan langsung dengan indeks terbalik sedangkan dengan carian klasik akan dijalankan pada dokumen lengkap yang mungkin tidak dapat dijalankan dalam senario masa nyata.

Aliran kerja Lucene

Sebelum Lucene benar-benar dapat mencari data, data perlu dilakukan. Mari gambarkan langkah-langkah ini untuk pemahaman yang lebih baik:

Aliran Kerja Lucene

Seperti yang ditunjukkan dalam rajah, inilah yang berlaku di Lucene:

  1. Lucene diberi dokumen dan sumber data lain
  2. Untuk setiap dokumen, Lucene terlebih dahulu menukar data ini menjadi teks biasa dan kemudian Penganalisis menukar sumber ini menjadi teks biasa
  3. Untuk setiap istilah dalam teks biasa, indeks terbalik dibuat
  4. Indeks sudah siap dicari

Dengan aliran kerja ini, Lucene adalah mesin carian teks penuh yang sangat kuat. Tetapi ini adalah satu-satunya bahagian yang dipenuhi oleh Lucene. Kita perlu melaksanakan kerja itu sendiri. Mari lihat komponen Pengindeksan yang diperlukan.

Komponen Lucene

Dalam bahagian ini, kami akan menerangkan komponen asas dan kelas asas Lucene yang digunakan untuk membuat indeks:

Contoh Permohonan

Kami akan menggunakan salah satu daripada banyak pola dasar Maven untuk membuat contoh projek untuk contoh kami. Untuk membuat projek, jalankan perintah berikut dalam direktori yang akan anda gunakan sebagai ruang kerja:

pola dasar mvn: menghasilkan -DgroupId = com.linuxhint.contoh -DartifactId = LH-LuceneContoh -DarchetypeArtifactId = maven-archetype-quickstart -DinteractiveMode = false

Sekiranya anda menjalankan maven untuk pertama kalinya, diperlukan beberapa saat untuk menyelesaikan arahan menghasilkan kerana maven harus memuat turun semua plugin dan artifak yang diperlukan untuk membuat tugas penjanaan. Inilah rupa output projek:

Penyediaan Projek

Setelah anda membuat projek, jangan ragu untuk membukanya di IDE kegemaran anda. Langkah seterusnya adalah menambahkan Dependensi Maven yang sesuai untuk projek tersebut. Inilah pom.fail xml dengan pergantungan yang sesuai:



org.apache.lucene
inti lucene
4.6.0


org.apache.lucene
lucene-penganalisis-biasa
4.6.0

Akhirnya, untuk memahami semua JAR yang ditambahkan ke dalam projek ketika kita menambahkan kebergantungan ini, kita dapat menjalankan perintah Maven yang mudah yang memungkinkan kita melihat Pokok Dependensi lengkap untuk sebuah projek ketika kita menambahkan beberapa kebergantungan padanya. Berikut adalah arahan yang boleh kita gunakan:

kebergantungan mvn: pokok

Apabila kita menjalankan perintah ini, ia akan menunjukkan kepada kita Pokok Ketergantungan berikut:

Akhirnya, kami membuat kelas SimpleIndexer yang berjalan

pakej com.linuxhint.contoh;
import java.io.Fail;
import java.io.Pembaca Fail;
import java.io.IOException;
org import.apache.lucene.analisis.Penganalisis;
org import.apache.lucene.analisis.standard.StandardAnalyzer;
org import.apache.lucene.dokumen.Dokumen;
org import.apache.lucene.dokumen.StoredField;
org import.apache.lucene.dokumen.Bidang Teks;
org import.apache.lucene.indeks.Penulis Indeks;
org import.apache.lucene.indeks.IndexWriterConfig;
org import.apache.lucene.kedai.Direktori FS;
org import.apache.lucene.guna.Versi;
kelas awam SimpleIndexer
Indeks String akhir statik persendirianDirectory = "/ Pengguna / shubham / tempat / LH-LuceneContoh / Indeks";
rentetan akhir statik persendirian dirToBeIndexed = "/ Pengguna / shubham / tempat / LH-LuceneContoh / src / main / java / com / linuxhint / contoh";
main statik kekosongan awam (String [] args) membuang Pengecualian
File indexDir = fail baru (indexDirectory);
Data fileDir = Fail baru (dirToBeIndexed);
SimpleIndexer indexer = SimpleIndexer baru ();
int numIndexed = pengindeks.indeks (indexDir, dataDir);
Sistem.keluar.println ("Jumlah fail yang diindeks" + numIndexed);

indeks int peribadi (File indexDir, File dataDir) melemparkan IOException
Penganalisis penganalisis = StandardAnalyzer baru (Versi.LUCENE_46);
IndexWriterConfig config = IndexWriterConfig baru (Versi.LUCENE_46,
penganalisis);
IndexWriter indexWriter = IndexWriter baru (FSDirectory.terbuka (indexDir),
konfigurasi);
Fail [] fail = dataDir.listFiles ();
untuk (Fail f: fail)
Sistem.keluar.println ("Fail pengindeksan" + f.getCanonicalPath ());
Dokumen dokumen = Dokumen baru ();
dokumen.tambah (TextField baru ("kandungan", FileReader baru (f)));
dokumen.tambah (StoredField baru ("fileName", f.getCanonicalPath ()));
indexWriter.addDocument (doc);

int numIndexed = indexWriter.maxDoc ();
indexWriter.tutup ();
pulangkan numIndexed;

Dalam kod ini, kami baru saja membuat contoh Dokumen dan menambahkan Medan baru yang mewakili kandungan Fail. Inilah output yang kami dapat semasa menjalankan fail ini:

Fail pengindeksan / Pengguna / shubham / tempat / LH-LuceneContoh / src / main / java / com / linuxhint / example / SimpleIndexer.jawa
Jumlah fail yang diindeks 1

Juga, direktori baru dibuat di dalam projek dengan kandungan berikut:

Data Indeks

Kami akan menganalisis semua fail yang dibuat dalam Indeks ini dalam lebih banyak pelajaran yang akan datang di Lucene.

Kesimpulannya

Dalam pelajaran ini, kami melihat bagaimana Apache Lucene berfungsi dan kami juga membuat aplikasi contoh ringkas yang berdasarkan Maven dan java.

SuperTuxKart untuk Linux
SuperTuxKart adalah tajuk hebat yang direka untuk membawa anda pengalaman Mario Kart secara percuma pada sistem Linux anda. Ia cukup mencabar dan meny...
Tutorial Battle for Wesnoth
The Battle for Wesnoth adalah salah satu permainan strategi sumber terbuka paling popular yang boleh anda mainkan pada masa ini. Bukan hanya permainan...
0 A.D. Tutorial
Daripada banyak permainan strategi di luar sana, 0 A.D. berjaya menonjol sebagai tajuk yang komprehensif dan permainan taktikal yang sangat mendalam w...