Rumah > Java > javaTutorial > Bagaimana untuk melaksanakan pengambilan dan carian teks penuh dalam Java

Bagaimana untuk melaksanakan pengambilan dan carian teks penuh dalam Java

WBOY
Lepaskan: 2023-10-08 09:31:40
asal
1121 orang telah melayarinya

Bagaimana untuk melaksanakan pengambilan dan carian teks penuh dalam Java

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.

1. Memperkenalkan perpustakaan Lucene

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>
Salin selepas log masuk

2 Cipta indeks

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);
    }
}
Salin selepas log masuk

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对象添加到索引中。

3. 执行搜索

创建完索引后,我们就可以进行搜索操作了。以下是一个简单的搜索示例代码:

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);
    }
}
Salin selepas log masuk

在上面的示例代码中,我们使用IndexSearcher来执行搜索操作。在执行搜索之前,我们需要先创建一个Query对象来表示要搜索的查询,并使用QueryParser来解析查询字符串为Query对象。然后,我们使用IndexSearchersearch方法执行搜索,并返回搜索结果的排名。

4. 使用示例

下面是一个使用全文检索和搜索功能的示例代码:

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();
        }
    }
}
Salin selepas log masuk

在上面的示例代码中,我们首先创建一个Indexer来创建索引,并添加一些文本数据。然后,我们创建一个Searcher

3. Lakukan carian

Selepas mencipta indeks, kami boleh melakukan operasi carian. Berikut ialah kod contoh carian mudah: 🎜rrreee🎜Dalam kod contoh di atas, kami menggunakan 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 Pengindeks untuk mencipta indeks , dan tambahkan beberapa data Teks. Kemudian, kami 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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan