検索
ホームページJava&#&チュートリアルJava API開発における全文検索処理にApache Luceneを使用する

インターネット上のデータ量は増加の一途をたどっており、データをいかに迅速かつ正確に検索するかが重要な課題となっています。この問題に対応して、オープン ソースの全文検索エンジン ライブラリの 1 つである Apache Lucene は、Java プログラミング言語と統合されたアプリケーションに適した全文検索エンジンが登場しました。この記事では、Java API開発における全文検索処理にApache Luceneを使用する方法を紹介します。

1. Apache Lucene の概要

Apache Lucene は全文検索エンジン ライブラリであり、以下に基づいた高性能、フル機能、使いやすい検索エンジン ライブラリです。ジャワ。大量のテキスト データのインデックスを作成し、効率的で正確かつ迅速な検索結果を提供できます。 Lucene は、ディスクベースのインデックス作成テクノロジを使用して、テキスト データを複数の単語に分割し、転置インデックス テーブルに保存します。逆索引テーブルは、単語と文書の間の関係を使用して、単語を、その単語が配置されている文書を指すようにします。クエリ プロセス中に、逆索引テーブルは単語ごとにドキュメントを検索し、それらをクエリ結果として返します。

2. Lucene のコア コンポーネント

Lucene は複数のコア コンポーネントで構成されています。これらのコンポーネントは連携して、次のような高性能の全文検索エンジンを実装します。

  1. Analyzer

Anaylzer は、テキスト データを分割するだけでなく、複数に分割するためにも使用されます。テキストを単語に変換するだけでなく、単語アナライザーを使用してストップワードをフィルタリングしたり、大文字と小文字を変換したりすることもできます。

  1. IndexWriter (インデックス ライター)

IndexWriter は、テキスト データをインデックス テーブルに変換し、逆インデックス テーブルを構築し、それをディスクに保存するために使用されます。データを検索する必要がある場合、インデックステーブルからデータを素早く検索できます。

  1. IndexReader (インデックス リーダー)

IndexReader は、ディスクからインデックス テーブルを読み取り、メモリにロードするために使用されます。データはメモリからロードされるため、データのクエリは非常に高速です。

  1. Query (クエリ)

Query は、ユーザーが入力した文字列を検索条件に変換し、Lucene インデックス テーブル内のデータを迅速に検索するために使用されます。

3. Lucene を使用して全文検索を実装する

  1. Lucene 依存関係の紹介

Maven は、Java 開発で一般的に使用される依存関係管理ツールです。 Maven に次の Lucene 依存関係を追加するだけです。

<dependency>
  <groupId>org.apache.lucene</groupId>
  <artifactId>lucene-core</artifactId>
  <version>8.8.2</version>
</dependency>
  1. インデックスの作成

IndexWriter を使用してデータをインデックス テーブルに変換します。ここでは、検索対象のデータがデータベースまたはその他のソースから取得されたものであると仮定します。これをテキスト形式に変換し、IndexWriter に追加する必要があります。以下は記事の例です:

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();
        }
    }

}

このクラス内:

  • Indexer コンストラクターで、IndexWriter と Directory を初期化します。ディレクトリはインデックス ライブラリの場所を表します。
  • add() メソッドは、テキスト データをインデックス ライブラリに追加するために使用されます。
  • delete() メソッドは、インデックス ライブラリからテキスト データを削除するために使用されます。
  • close() メソッドは、最後に IndexWriter を閉じるために使用されます。
    #Search
検索操作には Query と IndexReader を使用します。コード例を次に示します。

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();
        }
    }

}

このクラス内:

    Searcher コンストラクターで、IndexReader と IndexSearcher を初期化します。
  • getQuery()メソッドは、ユーザーが入力した検索条件をQuery型に変換するメソッドです。
  • search() メソッドは検索に使用され、検索操作の実行後に結果を返します。
  • close() メソッドは、最後に IndexReader を閉じるために使用されます。
4. 概要

この記事では、Apache Lucene を介して全文検索機能を実装する方法を紹介し、主に Lucene のコア コンポーネント、Lucene の使用方法、およびメソッドを紹介します。 Lucene のいくつかの一般的なクラス。この記事で説明したクラスとメソッドに加えて、Lucene には、さまざまなニーズに応じて適切に調整して使用できる機能が他にもたくさんあります。 Apache Lucene は、Java 言語による非常に信頼性の高い全文検索エンジン ライブラリであり、多くの分野に適しています。学習と実践を通じて、誰もが実際のアプリケーションで Apache Lucene をより適切に使用して、効率的、正確、高速な検索機能を実現できると信じています。

以上がJava API開発における全文検索処理にApache Luceneを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境