Java で全文取得と検索を実行する方法

WBOY
リリース: 2023-10-08 09:31:40
オリジナル
1114 人が閲覧しました

Java で全文取得と検索を実行する方法

Java で全文検索と全文検索を実行する方法

全文検索と検索は、大規模なテキスト データから特定のキーワードや語句を見つけるための手法です。 。検索エンジン、電子メール システム、文書管理システムなど、大量のテキスト データを処理するアプリケーションでは、全文検索および検索機能が非常に重要です。

Java は広く使用されているプログラミング言語として、全文検索および検索機能の実装に役立つ豊富なライブラリとツールを提供します。この記事では、Lucene ライブラリを使用して全文検索と検索を実装する方法を紹介し、いくつかの具体的なコード例を示します。

1. Lucene ライブラリを導入する

まず、Lucene ライブラリをプロジェクトに導入する必要があります。 Lucene ライブラリは、次の方法で Maven プロジェクトに導入できます:

<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>
ログイン後にコピー

2. インデックスの作成

全文検索を実行する前に、まずインデックスを作成する必要があります。このインデックスには、後続の検索操作を実行できるように、検索対象のテキスト データに関する関連情報が含まれています。以下は、インデックスを作成するための簡単なコード例です。

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);
    }
}
ログイン後にコピー

上記のコード例では、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);
    }
}
ログイン後にコピー

上記のサンプル コードでは、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();
        }
    }
}
ログイン後にコピー

上記サンプルコードでは、まず#を作成します。 ## Indexer を使用してインデックスを作成し、テキスト データを追加します。次に、検索を実行し、検索結果のテキスト コンテンツを出力するための Searcher を作成します。

上記のサンプル コードを通じて、Lucene ライブラリを使用して、Java で全文検索および検索機能を簡単に実装できます。 Lucene を使用すると、大規模なテキスト データから特定のキーワードやフレーズを効率的に検索できるため、テキスト処理アプリケーションの効率とパフォーマンスが向上します。

以上がJava で全文取得と検索を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート