Lucene

Pengantar Lucene

Pengantar Lucene
Dalam pelajaran ini, kita akan memahami cara kerja di balik salah satu mesin pencari teks lengkap yang paling kuat, Apache Lucene. Dengan Apache Lucene, kita dapat menggunakan API yang diekspos dalam banyak bahasa pemrograman dan membangun fitur yang kita butuhkan. Lucene adalah salah satu mesin paling kuat di mana Elasticsearch dibangun built.Sebelum kita mulai dengan aplikasi yang mendemonstrasikan cara kerja Apache Lucene, kita akan memahami cara kerja Lucene dan banyak komponennya. Mari kita mulai.

Mengapa Lucene dibutuhkan?

Pencarian adalah salah satu operasi paling umum yang kami lakukan beberapa kali sehari. Pencarian ini dapat dilakukan di beberapa halaman web yang ada di Web atau aplikasi Musik atau repositori kode atau kombinasi dari semuanya. Orang mungkin berpikir bahwa database relasional sederhana juga dapat mendukung pencarian. Ini benar. Basis data seperti MySQL mendukung pencarian teks lengkap. Tapi bagaimana dengan Web atau aplikasi Musik atau repositori kode atau kombinasi dari semuanya?? Basis data tidak dapat menyimpan data ini di kolomnya. Bahkan jika itu terjadi, itu akan memakan waktu yang tidak dapat diterima untuk menjalankan pencarian sebesar ini.

Mesin pencari teks lengkap mampu menjalankan kueri pencarian pada jutaan file sekaligus. Kecepatan penyimpanan data dalam aplikasi saat ini sangat besar. Menjalankan pencarian teks lengkap pada volume data semacam ini adalah tugas yang sulit. Ini karena informasi yang kami butuhkan mungkin ada dalam satu file dari miliaran file yang disimpan di web.

Bagaimana Lucene bekerja??

Pertanyaan yang pasti muncul di benak Anda adalah, bagaimana Lucene begitu cepat dalam menjalankan kueri penelusuran teks lengkap full? Jawaban untuk ini, tentu saja, adalah dengan bantuan indeks yang dibuatnya. Tapi alih-alih membuat indeks klasik, Lucene memanfaatkan Indeks Terbalik.

Dalam indeks klasik, untuk setiap dokumen, kami mengumpulkan daftar lengkap kata atau istilah yang dikandung dokumen. Dalam indeks Terbalik, untuk setiap kata di semua dokumen, kami menyimpan dokumen dan posisi apa kata/istilah ini dapat ditemukan di. Ini adalah algoritma standar tinggi yang membuat pencarian menjadi sangat mudah. Pertimbangkan contoh berikut untuk membuat indeks klasik:

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

Jika kita menggunakan indeks terbalik, kita akan memiliki indeks seperti:

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

Indeks terbalik jauh lebih mudah dipertahankan. Misalkan jika kita ingin menemukan Apache dalam istilah saya, saya akan memiliki jawaban langsung dengan indeks terbalik sedangkan dengan pencarian klasik akan berjalan pada dokumen lengkap yang mungkin tidak dapat dijalankan dalam skenario waktu nyata.

Alur kerja Lucene

Sebelum Lucene benar-benar dapat mencari data, ia perlu melakukan langkah-langkah. Mari kita visualisasikan langkah-langkah ini untuk pemahaman yang lebih baik:

Alur Kerja Lucene

Seperti yang ditunjukkan pada diagram, inilah yang terjadi di Lucene:

  1. Lucene diberi makan dokumen dan sumber data lainnya
  2. Untuk setiap dokumen, Lucene pertama-tama mengonversi data ini menjadi teks biasa dan kemudian Penganalisis mengonversi sumber ini menjadi teks biasa
  3. Untuk setiap istilah dalam teks biasa, indeks terbalik dibuat
  4. Indeks siap untuk dicari

Dengan alur kerja ini, Lucene adalah mesin pencari teks lengkap yang sangat kuat. Tapi ini adalah satu-satunya bagian yang dipenuhi Lucene. Kita perlu melakukan pekerjaan itu sendiri. Mari kita lihat komponen Pengindeksan yang dibutuhkan.

Komponen Lucene

Di bagian ini, kami akan menjelaskan komponen dasar dan kelas Lucene dasar yang digunakan untuk membuat indeks:

Contoh Aplikasi

Kami akan menggunakan salah satu dari banyak arketipe Maven untuk membuat proyek sampel untuk contoh kami. Untuk membuat proyek, jalankan perintah berikut di direktori yang akan Anda gunakan sebagai ruang kerja:

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

Jika Anda menjalankan maven untuk pertama kalinya, dibutuhkan beberapa detik untuk menyelesaikan perintah generate karena maven harus mengunduh semua plugin dan artefak yang diperlukan untuk membuat tugas pembuatan. Berikut adalah tampilan keluaran proyek:

Pengaturan Proyek

Setelah Anda membuat proyek, jangan ragu untuk membukanya di IDE favorit Anda. Langkah selanjutnya adalah menambahkan Ketergantungan Maven yang sesuai ke proyek. Ini pomnya.xml file dengan dependensi yang sesuai:



organisasi.apache.lusen
lucene-core
4.6.0


organisasi.apache.lusen
lucene-analyzers-umum
4.6.0

Terakhir, untuk memahami semua JAR yang ditambahkan ke proyek saat kita menambahkan dependensi ini, kita dapat menjalankan perintah Maven sederhana yang memungkinkan kita melihat Pohon Ketergantungan lengkap untuk sebuah proyek saat kita menambahkan beberapa dependensi ke dalamnya. Berikut adalah perintah yang dapat kita gunakan:

ketergantungan mvn: pohon

Ketika kita menjalankan perintah ini, itu akan menunjukkan kepada kita Pohon Ketergantungan berikut:

Akhirnya, kami membuat kelas SimpleIndexer yang berjalan

paket com.linuxhint.contoh;
impor jawa.io.Mengajukan;
impor jawa.io.Pembaca File;
impor jawa.io.IOException;
organisasi impor.apache.lusen.analisis.Penganalisis;
organisasi impor.apache.lusen.analisis.standar.Penganalisis Standar;
organisasi impor.apache.lusen.dokumen.Dokumen;
organisasi impor.apache.lusen.dokumen.Lapangan Tersimpan;
organisasi impor.apache.lusen.dokumen.Bidang Teks;
organisasi impor.apache.lusen.indeks.Penulis Indeks;
organisasi impor.apache.lusen.indeks.IndexWriterConfig;
organisasi impor.apache.lusen.toko.FSDirektori;
impor organisasi.apache.lusen.kegunaan.Versi: kapan;
SimpleIndexer kelas publik
private static final String indexDirectory = "/Users/shubham/somewhere/LH-LuceneExample/Index";
private static final String dirToBeIndexed = "/Users/shubham/somewhere/LH-LuceneExample/src/main/Java/com/linuxhint/example";
public static void main(String[] args) melempar Pengecualian
File indexDir = File baru(indexDirectory);
File dataDir = File baru(dirToBeIndexed);
Pengindeks SimpleIndexer = SimpleIndexer baru();
int numIndexed = pengindeks.indeks(indeksDir, dataDir);
Sistem.di luar.println("Jumlah File Terindeks " + numIndexed);

private int index(File indexDir, File dataDir) melempar IOException
Analyzer analyzer = baru StandardAnalyzer(Versi.LUCENE_46);
IndexWriterConfig config = new IndexWriterConfig(Versi.LUCENE_46,
penganalisis);
IndexWriter indexWriter = new IndexWriter(FSDirectory.buka (indeksDir),
konfigurasi);
File[] file = dataDir.daftarFile();
untuk (File f : file)
Sistem.di luar.println("File pengindeksan " + f.getCanonicalPath());
Dokumen dokumen = Dokumen baru();
dokter.add(new TextField("content", new FileReader(f)));
dokter.tambahkan(new StoredField("fileName", f.getCanonicalPath()));
penulis indeks.tambahkanDokumen(dok);

int numIndexed = indexWriter.maxDoc();
penulis indeks.Menutup();
kembali numIndexed;

Dalam kode ini, kami baru saja membuat instance Dokumen dan menambahkan Bidang baru yang mewakili konten File. Berikut adalah output yang kami dapatkan ketika kami menjalankan file ini:

File pengindeksan /Users/shubham/somewhere/LH-LuceneExample/src/main/Java/com/linuxhint/example/SimpleIndexer.Jawa
Total file yang diindeks 1

Juga, direktori baru dibuat di dalam proyek dengan konten berikut:

Data Indeks

Kami akan menganalisis semua file apa yang dibuat dalam Indeks ini dalam pelajaran selanjutnya di Lucene.

Kesimpulan

Dalam pelajaran ini, kami melihat cara kerja Apache Lucene dan kami juga membuat contoh aplikasi sederhana yang berbasis Maven dan java.

Cara Meningkatkan FPS di Linux?
FPS adalah singkatan dari Bingkai per detik. Tugas FPS adalah mengukur kecepatan bingkai dalam pemutaran video atau pertunjukan game. Dengan kata sede...
Game Lab Aplikasi Oculus Teratas
Jika Anda adalah pemilik headset Oculus maka Anda harus tahu tentang sideloading. Sideloading adalah proses menginstal konten non-toko di headset Anda...
10 Game Teratas untuk Dimainkan di Ubuntu
Platform Windows telah menjadi salah satu platform yang mendominasi untuk bermain game karena persentase besar dari game yang berkembang saat ini untu...