Dengan peningkatan jumlah data Internet, cara mencari data dengan cepat dan tepat telah menjadi isu penting. Sebagai tindak balas kepada masalah ini, enjin carian teks penuh telah muncul Apache Lucene adalah salah satu perpustakaan enjin carian teks penuh sumber terbuka, sesuai untuk aplikasi yang disepadukan dengan bahasa pengaturcaraan Java. Artikel ini akan memperkenalkan cara menggunakan Apache Lucene untuk pemprosesan carian teks penuh dalam pembangunan API Java.
1. Pengenalan kepada Apache Lucene
Apache Lucene ialah perpustakaan enjin carian teks penuh Ia adalah pustaka enjin carian berprestasi tinggi, berciri penuh dan mudah digunakan Jawa. Ia boleh mengindeks sejumlah besar data teks dan memberikan hasil carian yang cekap, tepat dan pantas. Lucene menggunakan teknologi pengindeksan berasaskan cakera untuk memisahkan data teks kepada berbilang perkataan dan kemudian menyimpannya dalam jadual indeks terbalik. Jadual indeks terbalik menggunakan hubungan antara perkataan dan dokumen untuk menunjukkan perkataan ke dokumen di mana perkataan itu berada. Semasa proses pertanyaan, jadual indeks terbalik mencari dokumen mengikut perkataan dan mengembalikannya sebagai hasil pertanyaan.
2. Komponen teras Lucene
Lucene terdiri daripada berbilang komponen teras. Komponen ini bekerjasama untuk melaksanakan enjin carian teks penuh berprestasi tinggi, termasuk:
Anaylzer digunakan untuk memisahkan data teks kepada berbilang Selain membahagikan teks ke dalam perkataan, penganalisis perkataan juga boleh digunakan untuk menapis perkataan henti, melakukan penukaran kes, dsb.
IndexWriter digunakan untuk menukar data teks kepada jadual indeks, membina jadual indeks terbalik dan mengekalkannya ke cakera . Apabila data perlu dicari, data boleh dicari dengan cepat dari jadual indeks.
IndexReader digunakan untuk membaca jadual indeks dari cakera dan memuatkannya ke dalam memori. Data dimuatkan daripada memori, jadi pertanyaan data adalah sangat pantas.
Pertanyaan digunakan untuk menukar rentetan yang dimasukkan oleh pengguna ke dalam keadaan carian dan mencari data dengan cepat dalam jadual indeks Lucene.
3. Gunakan Lucene untuk melaksanakan carian teks penuh
Maven ialah alat pengurusan pergantungan yang biasa digunakan dalam pembangunan Java. Kami hanya perlu menambah kebergantungan Lucene berikut dalam Maven:
<dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>8.8.2</version> </dependency>
Gunakan IndexWriter untuk menukar data kepada jadual indeks. Di sini kami menganggap bahawa data yang dicari datang daripada pangkalan data atau sumber lain. Kita perlu menukarnya kepada bentuk teks dan menambahnya pada IndexWriter. Berikut ialah contoh artikel:
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.FieldType; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.Term; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import java.nio.file.Paths; public class Indexer { private IndexWriterConfig indexWriterConfig = new IndexWriterConfig(new SmartChineseAnalyzer()); private IndexWriter indexWriter; public Indexer(String indexPath) { try { Directory directory = FSDirectory.open(Paths.get(indexPath)); indexWriter = new IndexWriter(directory, indexWriterConfig); } catch (Exception e) { e.printStackTrace(); } } public void add(String field, String value) { try { Document doc = new Document(); FieldType fieldType = new FieldType(); fieldType.setIndexOptions(FieldInfo.IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS); fieldType.setStored(true); fieldType.setTokenized(true); doc.add(new Field(field, value, fieldType)); indexWriter.addDocument(doc); indexWriter.commit(); } catch (Exception e) { e.printStackTrace(); } } public void delete(String field, String value) { try { indexWriter.deleteDocuments(new Term(field, value)); indexWriter.commit(); } catch (Exception e) { e.printStackTrace(); } } public void close() { try { indexWriter.close(); } catch (Exception e) { e.printStackTrace(); } } }
Dalam kelas ini:
Gunakan Pertanyaan dan IndexReader untuk operasi carian. Berikut ialah contoh kod:
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.MultiFieldQueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; public class Searcher { private String[] fields = new String[] {"title", "content"}; private Query query; private IndexReader indexReader; private IndexSearcher indexSearcher; public Searcher(String indexPath) { try { Directory directory = FSDirectory.open(Paths.get(indexPath)); indexReader = DirectoryReader.open(directory); indexSearcher = new IndexSearcher(indexReader); } catch (Exception e) { e.printStackTrace(); } } private Query getQuery(String keyword) { try { if (query == null) { query = new MultiFieldQueryParser(fields, new SmartChineseAnalyzer()).parse(keyword); } } catch (Exception e) { e.printStackTrace(); } return query; } public List<String> search(String keyword) { List<String> result = new ArrayList<String>(); try { TopDocs topDocs = indexSearcher.search(getQuery(keyword), 10); ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs) { result.add(indexSearcher.doc(scoreDoc.doc).get("title")); } } catch (Exception e) { e.printStackTrace(); } return result; } public void close() { try { indexReader.close(); } catch (Exception e) { e.printStackTrace(); } } }
Dalam kelas ini:
4. Ringkasan
Artikel ini memperkenalkan cara melaksanakan fungsi carian teks penuh melalui Apache Lucene, terutamanya melibatkan komponen teras Lucene, penggunaan Lucene dan kaedah untuk beberapa kelas biasa di Lucene. Selain kelas dan kaedah yang diliputi dalam artikel ini, terdapat banyak fungsi lain dalam Lucene yang boleh dilaraskan dengan sewajarnya dan digunakan mengikut keperluan yang berbeza. Apache Lucene ialah perpustakaan enjin carian teks penuh yang boleh dipercayai dalam bahasa Java, sesuai untuk banyak bidang. Melalui pembelajaran dan amalan, saya percaya bahawa semua orang boleh menggunakan Apache Lucene dengan lebih baik dalam aplikasi praktikal untuk mencapai fungsi carian yang cekap, tepat dan pantas.
Atas ialah kandungan terperinci Menggunakan Apache Lucene untuk pemprosesan carian teks penuh dalam pembangunan API Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!