Cara melakukan pengambilan dan carian teks penuh dalam Java
Pendapatan dan carian teks penuh ialah teknik untuk mencari kata kunci atau frasa tertentu dalam data teks berskala besar. Dalam aplikasi yang memproses sejumlah besar data teks, seperti enjin carian, sistem e-mel dan sistem pengurusan dokumen, perolehan teks penuh dan fungsi carian adalah sangat penting.
Sebagai bahasa pengaturcaraan yang digunakan secara meluas, Java menyediakan banyak perpustakaan dan alatan yang boleh membantu kami melaksanakan fungsi perolehan dan carian teks penuh. Artikel ini akan memperkenalkan cara menggunakan pustaka Lucene untuk melaksanakan pencarian dan carian teks penuh, serta menyediakan beberapa contoh kod khusus.
Pertama, kita perlu memperkenalkan perpustakaan Lucene ke dalam projek. Pustaka Lucene boleh diperkenalkan ke dalam projek Maven dengan cara berikut:
<dependencies> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>8.10.1</version> </dependency> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-analyzers-common</artifactId> <version>8.10.1</version> </dependency> </dependencies>
Sebelum melakukan carian teks penuh, kita perlu mencipta indeks terlebih dahulu. Indeks ini mengandungi maklumat tentang data teks yang akan dicari supaya kami boleh melakukan operasi carian seterusnya. Berikut ialah contoh kod mudah untuk mencipta indeks:
import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import java.io.IOException; import java.nio.file.Paths; public class Indexer { private IndexWriter indexWriter; public Indexer(String indexDir) throws IOException { Directory dir = FSDirectory.open(Paths.get(indexDir)); Analyzer analyzer = new StandardAnalyzer(); IndexWriterConfig config = new IndexWriterConfig(analyzer); indexWriter = new IndexWriter(dir, config); } public void close() throws IOException { indexWriter.close(); } public void addDocument(String content) throws IOException { Document doc = new Document(); doc.add(new TextField("content", content, Field.Store.YES)); indexWriter.addDocument(doc); } }
Dalam kod contoh di atas, kami menggunakan IndexWriter
untuk mencipta indeks dan menggunakan TextField
untuk menentukan medan . Apabila menambah kandungan untuk diindeks pada indeks, kita perlu mencipta objek Document
dahulu, kemudian menambah medan pada objek, dan akhirnya memanggil kaedah addDocument
untuk menambah < kod>Dokumen Objek ditambah pada indeks. IndexWriter
来创建索引,并使用TextField
来定义要索引的字段。将要索引的内容添加到索引中时,我们需要先创建一个Document
对象,然后将字段添加到该对象中,最后调用addDocument
方法将Document
对象添加到索引中。
创建完索引后,我们就可以进行搜索操作了。以下是一个简单的搜索示例代码:
import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.queryparser.classic.QueryParser; 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.io.IOException; import java.nio.file.Paths; public class Searcher { private IndexSearcher indexSearcher; private QueryParser queryParser; public Searcher(String indexDir) throws IOException { Directory dir = FSDirectory.open(Paths.get(indexDir)); Analyzer analyzer = new StandardAnalyzer(); IndexReader indexReader = DirectoryReader.open(dir); indexSearcher = new IndexSearcher(indexReader); queryParser = new QueryParser("content", analyzer); } public ScoreDoc[] search(String queryString, int numResults) throws Exception { Query query = queryParser.parse(queryString); TopDocs topDocs = indexSearcher.search(query, numResults); return topDocs.scoreDocs; } public Document getDocument(int docID) throws IOException { return indexSearcher.doc(docID); } }
在上面的示例代码中,我们使用IndexSearcher
来执行搜索操作。在执行搜索之前,我们需要先创建一个Query
对象来表示要搜索的查询,并使用QueryParser
来解析查询字符串为Query
对象。然后,我们使用IndexSearcher
的search
方法执行搜索,并返回搜索结果的排名。
下面是一个使用全文检索和搜索功能的示例代码:
public class Main { public static void main(String[] args) { String indexDir = "/path/to/index/dir"; try { Indexer indexer = new Indexer(indexDir); indexer.addDocument("Hello, world!"); indexer.addDocument("Java is a programming language."); indexer.addDocument("Lucene is a full-text search engine."); indexer.close(); Searcher searcher = new Searcher(indexDir); ScoreDoc[] results = searcher.search("Java", 10); for (ScoreDoc result : results) { Document doc = searcher.getDocument(result.doc); System.out.println(doc.getField("content").stringValue()); } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
在上面的示例代码中,我们首先创建一个Indexer
来创建索引,并添加一些文本数据。然后,我们创建一个Searcher
IndexSearcher
untuk melaksanakan operasi carian. Sebelum melakukan carian, kita perlu mencipta objek Query
untuk mewakili pertanyaan yang akan dicari dan menggunakan QueryParser
untuk menghuraikan rentetan pertanyaan ke dalam Query
objek. Kami kemudian menggunakan kaedah carian
IndexSearcher
untuk melakukan carian dan mengembalikan kedudukan hasil carian. 🎜🎜4 Contoh Penggunaan🎜🎜Berikut ialah contoh kod yang menggunakan fungsi pencarian dan carian teks penuh: 🎜rrreee🎜Dalam kod contoh di atas, kami mula-mula mencipta Pencari
untuk melakukan carian dan mencetak kandungan teks hasil carian. 🎜🎜Melalui kod sampel di atas, kami boleh melaksanakan fungsi pencarian dan carian teks penuh dengan mudah di Java menggunakan perpustakaan Lucene. Menggunakan Lucene, kami boleh mencari kata kunci atau frasa tertentu dengan cekap dalam data teks berskala besar, dengan itu meningkatkan kecekapan dan prestasi aplikasi pemprosesan teks. 🎜Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengambilan dan carian teks penuh dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!