Java の検索結果ハイライト – 同期および非同期インデックス

このガイドでは、GroupDocs.Search ライブラリを使用して Java の検索結果ハイライト を行う方法を学び、Java のドキュメントを同期的および非同期的にインデックスする手順をステップバイステップで紹介します。小規模なデスクトップツールの構築から大規模なエンタープライズ検索サービスまで、これらの手法により、アプリケーションスレッドをブロックせずに即時で視覚的に明確な一致結果を提供できます。

クイック回答

  • “highlight search results Java” は何を意味しますか? 返されたスニペット内の一致した各用語をマークアップ(例: <mark>)でラップすることを意味し、ユーザーはヒットのコンテキストを即座に確認できます。
  • 同期インデックスを使用すべきタイミングは? ドキュメントが追加された瞬間から検索可能である必要がある、小規模から中規模のコレクションに使用します。
  • 非同期インデックスが好ましいのはいつですか? 大量のバッチ処理や、インデックスがバックグラウンドで構築されている間に UI スレッドを応答可能に保つ必要がある場合に選択します。
  • ライセンスは必要ですか? 開発には無料トライアルが利用でき、フルライセンスを取得すると制限が解除され、上級機能が使用可能になります。
  • サポートされている Java バージョンは? Java 8 以降です。

“highlight search results Java” とは何ですか?

highlight search results java は、GroupDocs.Search から取得した生のマッチデータに対し、視覚的なヒント(通常は HTML の <mark> タグ)を各検索語の周囲に挿入するプロセスです。これにより、結果スニペットがウェブページや Swing コンポーネントで即座に読みやすくなり、クエリが出現する正確な位置を示すことでユーザーエクスペリエンスが向上します。

なぜ Java 用の GroupDocs.Search を使用するのか?

GroupDocs.Search は、高性能で言語に依存しないエンジンを提供し、1 秒あたり最大 5 000 ドキュメントの処理、30 以上のファイル形式のサポート、および 1,000 万ドキュメント規模のコレクションのインデックス を、全体のコーパスをメモリにロードせずに実現します。組み込みのハイライト機能、リアルタイムインデックス、マルチランゲージアナライザーにより、コンテンツ管理システム、e コマースカタログ、エンタープライズ文書リポジトリに最適です。

前提条件

  • Java Development Kit(JDK 8 以上)をインストールし、JAVA_HOME が正しく設定されていること。
  • IntelliJ IDEA や Eclipse などの IDE。
  • インデックス対象のファイル(プレーンテキスト、PDF、DOCX など)を格納したフォルダー(例: documents/)。
  • 依存関係管理のための Maven(または手動で JAR を追加)。

必要なライブラリと依存関係

Maven の pom.xml に GroupDocs.Search を追加します:

<repositories>
    <repository>
        <id>repository.groupdocs.com</id>
        <name>GroupDocs Repository</name>
        <url>https://releases.groupdocs.com/search/java/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-search</artifactId>
        <version>25.4</version>
    </dependency>
</dependencies>

直接ダウンロードする場合は、GroupDocs.Search for Java releases から最新バージョンを取得してください。

環境設定

  • JAVA_HOME が互換性のある JDK を指していることを確認します。
  • 新しい Maven プロジェクトを作成し、上記のスニペットを <dependencies> セクションに貼り付けます。
  • サンプルファイルを src/main/resources/documents/ のようなディレクトリに配置します。

GroupDocs.Search for Java のセットアップ方法

Index は、ディスク上に保存された検索可能なコレクションを表すコアクラスです。

ディスク上のフォルダーを指す Index インスタンスを作成し、ライセンスがある場合は適用し、必要に応じて言語固有のトークン化のためのアナライザーを構成します。この準備ステップにより、エンジンはインデックスを効率的に読み書きし、検索できるようになります。

Index クラスは、ディスク上の検索可能なコレクションを表す中心コンポーネントです。インスタンス化した後は、すべてのインデックス作成およびクエリ操作がこのオブジェクトを通じて行われます。

  1. ライブラリのインストール – 上記の Maven スニペットを使用するか、GroupDocs から JAR をダウンロードします。
  2. ライセンスの取得 – トライアルライセンスで開始し、デプロイ前に本番キーに置き換えます。
  3. インデックスの初期化 – 以下のスニペットはインデックスフォルダーを作成(または開く)方法を示しています:
import com.groupdocs.search.Index;

// Create an index in the specified folder
Index index = new Index("path/to/index/folder");

Java の検索結果ハイライト – 同期インデックス

DocumentHighlighter は検索結果からハイライトされたスニペットを生成するユーティリティクラスです。

インデックスをロードし、index.add(documentPath) でドキュメントを追加し、クエリを実行した後、DocumentHighlighter を呼び出して一致箇所を <mark> タグでラップします。このプロセスは呼び出し元スレッド上で実行されるため、add が返された直後にドキュメントは検索可能になります。

手順 1: インデックスを作成しエラーハンドリングを付加する

import com.groupdocs.search.*;
import com.groupdocs.search.events.*;
import java.nio.file.Paths;

public class SynchronousIndexingFeature {
    public static void main(String[] args) {
        String indexFolder = "YOUR_DOCUMENT_DIRECTORY/SynchronousIndexing";
        String documentsFolder = YOUR_DOCUMENT_DIRECTORY; // Replace with actual directory path

        Index index = new Index(indexFolder);

        // Handle errors
        index.getEvents().ErrorOccurred.add(new EventHandler<IndexErrorEventArgs>() {
            @Override
            public void invoke(Object sender, IndexErrorEventArgs args) {
                System.out.println(args.getMessage());
            }
        });

手順 2: ドキュメントを追加し検索を実行する

        // Add documents
        index.add(documentsFolder);

        // Perform a search
        String query = "tincidunt";
        SearchResult result = index.search(query);

手順 3: 結果を処理し Java の検索結果をハイライトする

        for (int i = 0; i < result.getDocumentCount(); i++) {
            FoundDocument document = result.getFoundDocument(i);
            System.out.println(": Document: " + document.getDocumentInfo().getFilePath());
            System.out.println(": Occurrences: " + document.getOccurrenceCount());
        }

        // Highlight results
        if (result.getDocumentCount() > 0) {
            FoundDocument document = result.getFoundDocument(0);
            String path = YOUR_OUTPUT_DIRECTORY + "/Highlighted.html";
            OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, path);
            DocumentHighlighter highlighter = new DocumentHighlighter(outputAdapter);
            index.highlight(document, highlighter);
        }
    }
}

Java の検索結果ハイライト – 非同期インデックス

IndexingOptions はインデックス作成プロセスの実行方法(同期モードまたは非同期モード)を設定します。

IndexingOptions をバックグラウンドモードで実行するよう構成し、StatusChanged イベントを購読して、UI が他のリクエストを処理し続ける間にエンジンがファイルをインデックスできるようにします。ステータスが Ready に変わったら、同期モードと同様に検索を実行し、ハイライトされたスニペットを取得できます。

AsyncIndexingListener は進捗更新を受け取り、メインスレッドをブロックせずにプログレスバーを表示したりステータスをログに記録したりできます。

手順 1: イベントリスナー付きでインデックスを設定する

import com.groupdocs.search.*;
import com.groupdocs.search.events.*;

public class AsynchronousIndexingFeature {
    public static void main(String[] args) {
        String indexFolder = "YOUR_DOCUMENT_DIRECTORY/AsynchronousIndexing";
        String documentsFolder = YOUR_DOCUMENT_DIRECTORY; // Replace with actual directory path

        Index index = new Index(indexFolder);

        // Handle errors and status changes
        index.getEvents().ErrorOccurred.add(new EventHandler<IndexErrorEventArgs>() {
            @Override
            public void invoke(Object sender, IndexErrorEventArgs args) {
                System.out.println(args.getMessage());
            }
        });

        index.getEvents().StatusChanged.add(new EventHandler<BaseIndexEventArgs>() {
            @Override
            public void invoke(Object sender, BaseIndexEventArgs args) {
                if (args.getStatus() != IndexStatus.Ready || args.getStatus() == IndexStatus.Failed) {
                    System.out.println("Indexing completed.");
                }
            }
        });

手順 2: 非同期モードを有効にしてインデックス作成を開始する

        // Set up async indexing options
        IndexingOptions options = new IndexingOptions();
        options.setAsync(true);

        // Add documents asynchronously
        index.add(documentsFolder, options);
    }
}

Java のドキュメントインデックス作成 – 実用的なヒント

index.update(path) は、指定されたパスのファイルでインデックス内の既存ドキュメントを更新します。

大規模なコレクションは 1 000〜5 000 ファイルのバッチに分割し、不要な解析を避けるために拡張子でフィルタリングし、変更されたファイルにはインデックス全体を再構築する代わりに index.update(path) を使用します。これらの実践により、メモリ使用量を低く抑え、インデックス作成時間を予測可能にして一貫性を保ちます。

  • バッチサイズ: 大規模コレクションの場合、メモリスパイクを防ぐためにフォルダーを小さなバッチに分割します。
  • ファイルフィルタ: 必要な形式(例: .pdf、.docx)のみを含めるよう IndexingOptions.setFileExtensions を使用します。
  • 再インデックス: ドキュメントが変更された場合、インデックスを最初から作り直すのではなく index.update(documentPath) を呼び出します。

パフォーマンス上の考慮点

  • メモリ: ヒープ使用量を監視し、同時に多数の大きなファイルを処理する場合は -Xmx を増やします。
  • CPU: 非同期インデックスはワークロードをスレッド間に分散しますが、CPU を消費します。JVisualVM で使用率を追跡してください。
  • 結果ハイライト: ハイライトには適度なオーバーヘッド(結果あたり約 2〜5 ms)がかかります。同じスニペットを繰り返し表示する場合は生成された HTML をキャッシュしてください。

よくある質問

Q: 同じアプリケーションで同期インデックスと非同期インデックスを組み合わせることはできますか?
A: はい。小規模で頻繁に更新されるセットには同期インデックスを使用し、バルクインポートやバックグラウンドジョブには非同期インデックスを使用します。

Q: ハイライトスタイルをカスタマイズするには?
A: 一致した用語の周囲に希望の HTML、CSS、または XML タグを書き込むカスタム DocumentHighlighter 実装を提供します。

Q: GroupDocs.Search がデフォルトでサポートしているファイルタイプは何ですか?
A: テキスト、PDF、DOC/DOCX、XLS/XLSX、PPT/PPTX、HTML など、組み込みパーサーにより 30 以上の形式をサポートしています。

Q: 複数言語を同時に検索することは可能ですか?
A: もちろんです。GroupDocs.Search にはマルチランゲージアナライザーが含まれており、インデックス作成時に適切な Analyzer を設定するだけです。

Q: インデックスフォルダーをどのように保護すればよいですか?
A: インデックスを保護されたディレクトリに保存し、厳格なファイルシステム権限を設定し、必要に応じてライブラリのセキュリティ機能でインデックスを暗号化します。


最終更新日: 2026-09-11
テスト環境: GroupDocs.Search 25.4 for Java
作者: GroupDocs

関連チュートリアル