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