java フルテキスト検索を GroupDocs.Search で実装する方法
データ駆動型アプリケーションの時代に、java full text search は膨大な文書コレクションを即座に検索可能なナレッジベースに変換するために不可欠です。エンタープライズ向けポータルを構築する場合でも、軽量デスクトップユーティリティを作成する場合でも、適切に構成された検索ネットワークはクエリ遅延を秒単位からミリ秒単位に削減し、データが増加しても結果の関連性を保ちます。本チュートリアルでは、GroupDocs.Search for Java の導入、検索対象ファイルの追加、ノード上のディレクトリ設定、リアルタイムインデックスの有効化について説明し、手動操作なしでインデックスを常に最新に保つ方法を紹介します。
Why this matters: java full text search インデックスはクエリ遅延を削減し、データ量に応じてスケールし、Web ポータル、デスクトップアプリ、クラウドマイクロサービスなど、あらゆる Java‑based ソリューションに強力なフルテキスト機能を提供します。
クイック回答
- GroupDocs.Search の主な目的は何ですか? 分散ネットワーク上で文書をインデックス化および検索する、スケーラブルな java 検索エンジンを提供します。
- どのバージョンを使用すべきですか? 新規プロジェクトには最新の安定版リリース(例: 25.4)を推奨します。
- ライセンスは必要ですか? 30 日間の無料トライアルが利用可能です。製品環境で使用するには永続ライセンスが必要です。
- ファイルとディレクトリの両方を追加できますか? はい –
addFilesとaddDirectoriesヘルパーを使用してコンテンツを取り込みます。 - 必要な Java バージョンは何ですか? Java 8 以上、依存関係管理には Maven が必要です。
- リアルタイムインデックス java はどのように機能しますか? ノードイベントを購読することで、ファイルが変更された際に自動的に再インデックスをトリガーできます。
“create searchable index java” とは何ですか?
Java で検索可能なインデックスを作成することは、用語をそれを含む文書にマッピングするデータ構造を構築し、迅速なフルテキストクエリを可能にすることを意味します。GroupDocs.Search for Java は重い処理を抽象化し、文書の投入と検索動作のチューニングに集中できるようにします。
GroupDocs.Search for Java を使用する理由
GroupDocs.Search は水平にスケールする java 検索エンジンを提供し、50 以上の入力・出力フォーマットをサポートし、イベント駆動型インデックスを提供します。複数ノードを展開することでインデックス作業負荷を分散し、組み込みのヘルスチェックによりネットワークの信頼性を維持します。また、RESTful API とカスタマイズ可能なアナライザーを提供し、関連性を細かく調整できます。
前提条件
- JDK 8+ が開発マシンにインストールされていること。
- IntelliJ IDEA や Eclipse などの IDE。
- Java と Maven の基本的な知識。
- GroupDocs.Search for Java ライブラリへのアクセス(ダウンロードまたは Maven)。
GroupDocs.Search for Java の設定
Maven 依存関係
pom.xml にリポジトリと依存関係を追加します:
<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>
Pro tip: 公式リリースページでバージョン番号を最新に保ってください。
公式サイトから JAR を直接ダウンロードすることもできます: GroupDocs.Search for Java releases.
ライセンス取得
- Free trial: 30 日間の評価。
- Temporary license: 延長テスト用にリクエスト。
- Purchase: 本番環境での導入には購入が必要です。
基本的な初期化
インデックスファイルが保存されるフォルダーを指し、基本通信ポートを定義する構成オブジェクトを作成します:
import com.groupdocs.search.Configuration;
class InitializeSearch {
public static void main(String[] args) {
String basePath = "your/base/path";
int basePort = 8080;
Configuration config = new ConfiguringSearchNetwork().configure(basePath, basePort);
// Use this configuration for subsequent operations
}
}
GroupDocs.Search を使用して searchable index java を作成する方法
SearchConfiguration オブジェクトをロードし、SearchNetworkNode を起動し、node.getIndexer().addFiles(...) を呼び出してインデックスを構築します。このワンラインパターンにより、完全に機能する java full text search ネットワークが起動し、即座にクエリを受け付けられるようになります。その後、同じ base path とポート範囲を共有するノードを追加することでスケールできます。
機能 1 – 設定とネットワーク構成
SearchConfiguration クラスはノード起動に必要なすべての設定を保持します。
import com.groupdocs.search.Configuration;
import com.groupdocs.search.scaling.*;
class ConfiguringSearchNetwork {
public static Configuration configure(String basePath, int basePort) {
// Configure the search network with specified base path and port
return new Configuration(basePath, basePort);
}
}
basePath– インデックスデータが永続化されるディレクトリ。basePort– 開始ポート。各ノードはこの値からインクリメントします。
機能 2 – 検索ネットワークノードの展開
SearchNetworkNode は任意のマシンで実行できる個別のインデックスサービスを表します。
import com.groupdocs.search.scaling.*;
class SearchNetworkDeployment {
public static SearchNetworkNode[] deploy(String basePath, int basePort, Configuration configuration) {
// Deploy nodes based on the provided configuration
return new SearchNetworkNode[]{new SearchNetworkNode()};
}
}
SearchNetworkNode はインデックスをホストし、追加/削除イベントを処理し、検索クエリに応答するコアランタイムコンポーネントです。複数ノードを展開することで、水平にスケールする create java full text search クラスタを作成できます。
機能 3 – ノードイベントの購読
リアルタイムの更新により、インデックスがファイルシステムの変更と同期されます。
import com.groupdocs.search.scaling.*;
class SearchNetworkNodeEvents {
public static void subscribe(SearchNetworkNode node) {
// Logic to subscribe to the specified node's events
}
}
イベントをリッスンすることで、新しいファイルが到着した際に自動的に再インデックスをトリガーでき、event driven indexing を手動スクリプトなしで実現します。
機能 4 – ネットワークノードへのディレクトリ追加
このヘルパーを使用して add directories to node を実行し、サポートされているすべての文書を再帰的に収集します。
import java.io.File;
import java.util.ArrayList;
class DirectoryAdder {
public static void addDirectories(SearchNetworkNode node, String... directoryPaths) {
ArrayList<String> files = new ArrayList<>();
for (String directoryPath : directoryPaths) {
final File folder = new File(directoryPath);
listFiles(folder, files);
}
addFiles(node, files.toArray(new String[0]));
}
private static void listFiles(final File folder, ArrayList<String> list) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFiles(fileEntry, list);
} else {
list.add(fileEntry.getPath());
}
}
}
}
機能 5 – ネットワークノードへのファイル追加
細かい制御が必要な場合は、add files to search を個別に実行します:
import com.groupdocs.search.Document;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import org.apache.commons.io.FilenameUtils;
import com.groupdocs.search.Indexer;
import com.groupdocs.search.options.*;
class FileAdder {
public static void addFiles(SearchNetworkNode node, String... filePaths) {
try {
InputStream[] streams = new FileInputStream[filePaths.length];
Document[] documents = new Document[filePaths.length];
for (int i = 0; i < filePaths.length; i++) {
String filePath = filePaths[i];
InputStream stream = new FileInputStream(filePath);
streams[i] = stream;
// Create a document from the input stream
String fileName = FilenameUtils.getName(filePath);
String extension = "." + FilenameUtils.getExtension(filePath);
Document document = Document.createFromStream(
fileName,
new Date(),
extension,
stream);
documents[i] = document;
}
// Initialize the indexer and configure options
Indexer indexer = node.getIndexer();
IndexingOptions options = new IndexingOptions();
options.setUseRawTextExtraction(false);
} catch (IOException e) {
e.printStackTrace();
}
}
}
一般的なユースケース
- Enterprise document portals は数千の PDF や Office ファイルに対して即時検索が必要です。
- Legal e‑discovery platforms は新しい証拠が継続的に追加され、リアルタイムで検索可能である必要があります。
- Content management systems は画像、プレゼンテーション、スプレッドシートを保存し、フルテキスト検索が必要です。
一般的な問題と解決策
| 問題 | 原因 | 対策 |
|---|---|---|
| 検索結果に文書が表示されません | インデックスがコミットされていない | node.getIndexer().commit() をファイル追加後に呼び出します。 |
| ポート競合エラー | 別のサービスが basePort を使用しています | 別の basePort を選択するか、空きポートを確認してください。 |
| サポートされていないファイル形式 | ライブラリにパーサがありません | ファイル拡張子がサポートされていることを確認するか、カスタムエクストラクタを追加してください。 |
トラブルシューティングのヒント
- Verify node health: ビルトインのヘルスチェックエンドポイント (
http://localhost:{port}/health) を使用して各ノードが稼働していることを確認します。 - Monitor memory usage: 大量の文書バッチはメモリ使用量を急増させる可能性があります。小さなチャンクでインデックスし、定期的に
commit()を呼び出してください。 - Check logs: GroupDocs.Search は詳細なログを
basePathフォルダーに書き込みます—パースエラーやネットワークタイムアウトについて確認してください。
よくある質問
Q: クラウドベースの Java アプリケーションで GroupDocs.Search を使用できますか?
A: はい。ライブラリはあらゆる Java ランタイムで動作し、basePath をネットワークマウントフォルダーまたはクラウドストレージマウントに設定できます。
Q: ファイルが変更されたときにインデックスを更新するには?
A: ノードイベントを購読し(Feature 3 を参照)、変更されたパスに対して addFiles または addDirectories を再度呼び出します。
Q: デプロイできるノード数に制限はありますか?
A: 実質的にはハードウェアとネットワーク帯域幅が上限です。API にはハードな上限はありません。
Q: 新しいファイルを追加した後にノードを再起動する必要がありますか?
A: いいえ。ファイル追加は自動的にインデックスをトリガーします。操作を遅延させた場合のみコミットが必要です。
Q: 標準でサポートされているドキュメント形式は何ですか?
A: PDF、DOC/DOCX、XLS/XLSX、PPT/PPTX、TXT、HTML、そして多数の画像タイプ—合計で 50 以上の形式をサポートしています。
Q: 継続的にアップロードが行われるフォルダーに対してリアルタイムインデックス java を有効にするには?
A: ファイルシステムウォッチャー(例: java.nio.file.WatchService)を実装し、新しいファイルが検出されるたびに DirectoryAdder.addDirectories(node, path) を呼び出します。
最終更新日: 2026-09-27
テスト環境: GroupDocs.Search for Java 25.4
作者: GroupDocs