GroupDocs.Search for Javaでワイルドカードを使用したフレーズ検索方法

モダンなドキュメント中心のアプリケーションでは、how to search phrase を迅速かつ正確に行うことがユーザー体験の成否を左右します。ナレッジベース、eコマースカタログ、コンプライアンス重視のリポジトリを構築する場合でも、正確なフレーズまたはその柔軟なバリエーションを見つけられることは、ユーザーの生産性を高め、サポートコストを削減します。本チュートリアルでは、GroupDocs.Search for Java のインストール方法、検索インデックスの作成、ドキュメントのロード、正確なフレーズ検索とワイルドカード拡張クエリの実行方法を、明確で本番環境向けのコードスニペットと共に解説します。

クイック回答

  • フレーズ検索の主なメリットは何ですか?
    単語の順序と近接性を正確に一致させ、正確なシーケンスを含むドキュメントのみが返されます。
  • フレーズ内でワイルドカードは使用できますか?
    はい。ワイルドカードを使用すると、単語をスキップまたは置換しつつ、全体の順序を保持できます。
  • 開発用にライセンスは必要ですか?
    無料トライアルでテスト可能です。本番環境ではフルライセンスが必要です。
  • どの Maven バージョンを使用すべきですか?
    執筆時点での最新リリース(例: 25.4)を使用してください。
  • 大量のドキュメントセットにも適していますか?
    絶対に適しています。インデックスが最適化されていれば、数十万件のドキュメントでもサブ秒クエリ遅延で処理できます。

「how to search phrase」とは何ですか?

フレーズ検索とは、ドキュメント内で特定の単語シーケンスを探すことを指します。
フレーズクエリを実行すると、エンジンは単語が正確な順序で、かつ定義された近接範囲内に出現することを確認し、別の文脈で同じ単語が出現する無関係なヒットを排除します。これにより、法的条項、製品コード、順序が重要なテキストの検索に最適です。

フレーズ検索とワイルドカードクエリに GroupDocs.Search を使用する理由

GroupDocs.Search は 1 百万ドキュメントまでの高スループットインデックス作成と、サブ秒クエリ応答時間 を典型的なサーバーハードウェア上で実現します。クエリ言語は正確なフレーズ、シンプルな * と ? ワイルドカード、数値範囲(*2~5)などの高度なパターンをサポートします。ライブラリは Maven または直接 JAR ダウンロードで任意の Java アプリケーションに統合でき、Java 8+ で外部サービスなしで動作します。

前提条件

  • Java 8 以上(Java 11 LTS 推奨)。
  • Maven 3 以上(依存関係管理を利用する場合)。
  • Java プロジェクト構造とオブジェクト指向概念の基本的な理解。

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

Maven を使用する場合

公式リポジトリと GroupDocs.Search の依存関係を pom.xml に追加します。

<!-- Maven repository -->
<repositories>
    <repository>
        <id>groupdocs-releases</id>
        <url>https://repository.groupdocs.com/release</url>
    </repository>
</repositories>

<!-- GroupDocs.Search dependency -->
<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-search</artifactId>
    <version>25.4</version>
</dependency>

直接ダウンロード

または、公式リリースページから最新 JAR をダウンロードしてください: GroupDocs.Search for Java releases。

ライセンス取得

  • 無料トライアル: 手軽な実験に最適。インデックス対象データは 100 MB に制限されます。
  • 一時ライセンス: GroupDocs ポータルから 30 日間の評価キーをリクエストできます。
  • フルライセンス: 本番利用と無制限インデックス容量に必須です。

基本的な初期化とセットアップ

インデックスファイルを格納するフォルダーを作成し、Index オブジェクトをインスタンス化します。Index クラスはディスク上に保存された検索可能インデックスを表し、ドキュメントの追加、更新、クエリ実行メソッドを提供します。

<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>

検索対象にしたいドキュメントを追加します。

String indexFolder = "YOUR_OUTPUT_DIRECTORY/PhraseSearch";
Index index = new Index(indexFolder);

GroupDocs.Search でワイルドカード付きフレーズ検索を行う方法

このセクションでは、正確一致、シンプルワイルドカード、拡張ワイルドカードパターンの 3 つのレベルでフレーズ検索を実演し、インデックス作成、ドキュメント追加、各クエリタイプの実行方法を簡潔な Java コードで示します。テキストベースのクエリとオブジェクトベースのクエリ構築の両方を例示し、柔軟な検索機能をアプリケーションに統合できるようにします。

シンプルフレーズ検索

概要

法的条項や製品モデル番号など、正確な単語シーケンス が必要な場合に使用します。

直接回答

インデックスをロードし、引用符で囲んだフレーズ(例: "quick brown fox")で search を呼び出すと、エンジンはその正確なシーケンスを含むドキュメントのみを返します。クエリは数ミリ秒で実行され、数十万件のファイルを含むインデックスでも高速です。

手順 1: インデックス作成

String documentsFolder = "YOUR_DOCUMENT_DIRECTORY";
index.add(documentsFolder);

手順 2: ドキュメントをインデックスに追加

Index index = new Index(indexFolder);

手順 3: 特定フレーズのテキスト検索

index.add(documentsFolder);

手順 4: オブジェクトベースクエリ(正確フレーズ検索)

String queryText = "\"sollicitudin at ligula\"";
SearchResult resultText = index.search(queryText);

ワイルドカード付きフレーズ検索

概要

ワイルドカードプレースホルダー(* は任意の文字数、? は単一文字)を使用すると、可変単語をスキップ しつつ周囲の順序を保持できます。

直接回答

引用符で囲んだフレーズ内にワイルドカードトークン(*)を挿入すると、例として "quick * fox" は quick と fox の間に任意の単語が入っていても一致します。エンジンはクエリ時にワイルドカードを展開し、パターンに合致するインデックス用語のみを走査するため、パフォーマンスはプレーンフレーズ検索と同等です。

手順 1: インデックス作成

(シンプルフレーズ検索と同様)

手順 2: ドキュメントをインデックスに追加

(上記と同様)

手順 3: テキスト形式のワイルドカード検索

SearchQuery word1 = SearchQuery.createWordQuery("sollicitudin");
SearchQuery word2 = SearchQuery.createWordQuery("at");
SearchQuery word3 = SearchQuery.createWordQuery("ligula");
SearchQuery queryObject = SearchQuery.createPhraseSearchQuery(word1, word2, word3);
SearchResult resultObject = index.search(queryObject);

手順 4: ワイルドカード付きオブジェクトベースクエリ(Wildcard Search Java)

String queryText = "\"sollicitudin *0~~3 ligula\"";
SearchResult resultText = index.search(queryText);

高度なワイルドカード検索

概要

数値範囲、オプション文字、カスタム正規表現風パターンを組み合わせて、高度なマッチング(バージョン番号や製品コードなど)を実現します。

直接回答

拡張ワイルドカード構文 *min~max を使用して許容単語距離の範囲を定義したり、? で単一文字をマッチさせます。例として、"error *2~5 code" は error の後に 2〜5 語が続き、最後に code が来るケースを検索します。この精度は偽陽性を減らしつつ柔軟性を提供します。

手順 1: インデックス作成

(明確化のため再掲)

手順 2: ドキュメントをインデックスに追加

(再掲)

手順 3: 複雑なワイルドカードパターンのテキスト検索

SearchQuery word1 = SearchQuery.createWordQuery("sollicitudin");
SearchQuery wildcard2 = SearchQuery.createWildcardQuery(0, 3);
SearchQuery word3 = SearchQuery.createWordQuery("ligula");
SearchQuery queryObject = SearchQuery.createPhraseSearchQuery(word1, wildcard2, word3);
SearchResult resultObject = index.search(queryObject);

手順 4: 高度なワイルドカードを使用したオブジェクトベースクエリ

String queryText = "\"sollicitudin *0~~3 ?(0~4)la\"";
SearchResult resultText = index.search(queryText);

実用的な活用例

  • コンテンツ管理システム: エディタは正確な条項や柔軟な抜粋を数百ページを手作業でスキャンせずに特定できます。
  • Eコマースカタログ: 購入者は記述子を省略したり同義語を使用したりしても、ワイルドカード許容により商品を見つけられます。
  • 法務・コンプライアンス: 契約書間でわずかな表記揺れがある条項を迅速に抽出できます。

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

  • インデックス作成は 安定したドキュメントセットにつき一度だけ行い、すべてのクエリで同じ Index インスタンスを再利用します。
  • 新規ファイルが追加されたら インデックスをインクリメンタルに更新し、全体再構築を避けて CPU 使用率を抑えます。
  • ワイルドカードパターンは具体的に 設計してください。広範囲の * は用語展開数を増やし CPU 負荷を上げる可能性があります。
  • index.optimize() を定期的に呼び出す(サポートされている場合)ことでインデックスを圧縮し、メモリ消費を抑制します。

よくある問題と解決策

問題解決策
ワイルドカードクエリで結果が返らないワイルドカード構文(*min~max)を確認し、対象単語が定義距離内に存在することを確認してください。
ファイル更新後にインデックスが古くなるindex.add(updatedFolder) またはインクリメンタル更新 API を使用して変更されたファイルのみをリフレッシュします。
大規模データセットでメモリ使用量が高いJVM ヒープを増やす(例: -Xmx4g 以上)と、インデックスを複数のシャードに分割して並列処理を検討してください。

FAQ

Q: ワイルドカードとフレーズ検索の違いは何ですか?
A: フレーズ検索は正確な単語順と間隔を要求しますが、ワイルドカードはその順序内で単語を置換またはスキップでき、柔軟なマッチングを提供します。

Q: 数値データにワイルドカードを使用できますか?
A: はい。ワイルドカード範囲パラメータ(*min~max)は数値にも適用でき、"version *1~3" のようなクエリが可能です。

Q: 非常に大規模なドキュメントコレクションはどう扱うべきですか?
A: インデックスを最適化し、インクリメンタル更新を行い、特定的なワイルドカードパターンで用語展開を制限します。GroupDocs.Search は 1 百万ドキュメントをインデックスし、標準ハードウェアでクエリ遅延を 200 ms 未満に抑えられます。

Q: リアルタイム検索シナリオに適していますか?
A: 絶対に適しています。インデックスが構築された後はクエリがミリ秒単位で実行され、インタラクティブな検索ボックスやオートコンプリート機能に最適です。

Q: 既存の Java プロジェクトにこのライブラリを統合できますか?
A: はい。Maven 依存関係または JAR を追加し、上記のように Index をインスタンス化すれば、既存コードを変更せずにクエリが可能です。


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

double word1 = SearchQuery.createWordQuery("sollicitudin");
SearchQuery wildcard2 = SearchQuery.createWildcardQuery(0, 3);

WordPattern pattern = new WordPattern();
pattern.appendWildcard(0, 4);
pattern.appendString("la");

SearchQuery wordPattern3 = SearchQuery.createWordPatternQuery(pattern);
SearchQuery queryObject = SearchQuery.createPhraseSearchQuery(word1, wildcard2, wordPattern3);
SearchResult resultObject = index.search(queryObject);

関連チュートリアル