GroupDocs.Search for Java を使用した効率的な文書検索のマスター
数千の PDF、Word ファイル、スプレッドシートの中から正しい箇所を見つけることは、干し草の山から針を探すように感じられることがあります。インデックスの作成方法 を迅速に行い、その針を取り出すことが文書検索ソリューションの価値を決めます。このチュートリアルでは、GroupDocs.Search for Java という高性能な Java 検索ライブラリを使用して、インデックスの作成方法、インデックスへの文書追加、およびファイル、ストリーム、文字列、構造化データなど複数の形式からテキストを抽出する方法を学びます。最後まで実装すれば、メモリ使用量を抑えつつ大規模な文書コレクションに対応できる本番レベルのインデックスパイプラインが手に入ります。
クイック回答
- 主な目的は何ですか? インデックスの作成方法 と文書内容を瞬時に取得することです。
- どのライブラリを使用すべきですか? GroupDocs.Search for Java java search library。
- テキストをファイルに出力できますか? はい – ライブラリは HTML、プレーンテキストなどの output text to file アダプタを提供します。
- 構造化抽出はサポートされていますか? もちろんです – フィールドレベルのデータを取得するには structured text extraction アダプタを使用してください。
- ライセンスは必要ですか? 開発にはトライアルライセンスで問題ありませんが、本番環境には永続ライセンスが必要です。
学べること
- GroupDocs.Search for Java を使用して インデックスの作成方法 と インデックスへの文書追加 を行う方法。
- output text to file、ストリーム、文字列、構造化フォーマットへのテキスト出力手法。
- インデックス作成を高速かつメモリ効率的に保つパフォーマンス最適化のヒント。
- 法務契約リポジトリや学術論文アーカイブなど、これらの機能が活躍する実例。
GroupDocs.Search for Java を使用すべき理由
GroupDocs.Search は 50 以上の入力および出力フォーマット(DOCX、XLSX、PPTX、PDF、HTML、一般的な画像形式など)をサポートし、ファイル全体をメモリに読み込むことなくマルチギガバイトのファイルをインデックス化できます。ベンチマークでは、標準的な 8 コアサーバー上で 1 GB の文書コレクションを 2 分未満でインデックス化でき、検索クエリは 100 ms 未満で結果を返します。
前提条件
- Java Development Kit (JDK) 8 以上。
- GroupDocs.Search for Java ライブラリ(トライアルまたはライセンス版)。
- 依存関係管理のための Maven。
- 基本的な Java I/O の知識。
GroupDocs.Search for Java のセットアップ
まず、GroupDocs.Search の Maven リポジトリと依存関係をプロジェクトの pom.xml に追加します。この手順により、ライブラリがクラスパス上で利用可能になります。
Maven Setuppom.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>
直接ダウンロードを希望する方は、最新バージョンを GroupDocs.Search for Java releases から取得できます。
License Acquisition
本番環境で GroupDocs.Search を使用するには、公式サイトからトライアルまたは永続ライセンスを取得してください。トライアルライセンスは開発・テストに制限なく使用できます。
カスタム設定でインデックスを作成する方法(Java)
Index は検索可能な文書コレクションを表すコアクラスです。IndexSettings はインデックスの圧縮などのオプションを設定します。CompressionLevel は保存テキストに適用される圧縮度合いを定義します。
圧縮を有効にした Index オブジェクトをロードし、フォルダーを指し示してすべての対応ファイルを追加します。具体的には次のようにします:new Index("indexFolder", new IndexSettings().setCompressionLevel(CompressionLevel.High)) で Index をインスタンス化し、index.add("documentsFolder", true) を呼び出してサポートされているすべてのファイルを再帰的にインデックス化します。高圧縮モードはディスク上のサイズを最大 70 % 縮小しつつ、検索速度は高速なままです。
インデックスの作成は検索駆動アプリケーションの基盤です。以下の例はプロセスを順に説明し、各設定を解説し、インデックスが正常に構築されたことを確認する方法を示します。
インデックス作成と文書インデックス化
概要
Index クラスは検索可能な文書コレクションを表すコアコンポーネントです。逆インデックス、用語辞書、そして高速検索に必要なメタデータを保持します。
import com.groupdocs.search.*;
import java.io.ByteArrayOutputStream;
public class FeatureIndexCreation {
public static void main(String[] args) {
// Define the folder paths for indexing
String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
String documentsFolder = YOUR_DOCUMENT_DIRECTORY + "/DocumentsPath"; // Adjust as needed
// Creating an index settings instance with compression enabled
IndexSettings settings = new IndexSettings();
settings.setTextStorageSettings(new TextStorageSettings(Compression.High));
// Creating the index in the specified folder
Index index = new Index(indexFolder, settings);
// Adding documents from the specified folder to the index
index.add(documentsFolder);
}
}
Explanation
- Index Settings: テキスト保存に high compression を有効にし、ディスク使用量を最適化しつつクエリ速度を犠牲にしません。
- Adding Documents:
index.add()メソッドは adds documents to index を行い、フォルダーを再帰的にスキャンし、すべてのサポート形式を自動的に処理します。
テキストをファイル、ストリーム、文字列、構造化フォーマットに出力する方法
インデックス作成後、文書の生テキストまたはフォーマット済みテキストを抽出する必要が頻繁にあります。GroupDocs.Search は抽出したコンテンツをファイル、インメモリストリーム、Java String、または構造化オブジェクトモデルに書き込む 4 つのアダプタを提供します。
文書テキストのファイル出力
FileOutputAdapter は抽出した文書テキストを選択した形式でファイルに書き込みます。
概要
FileOutputAdapter は抽出テキストを選択した形式(HTML、プレーンテキストなど)でディスク上のファイルに直接書き込みます。人が読みやすいレポートの生成や、下流の処理パイプラインへの入力に便利です。
import com.groupdocs.search.*;
public class FeatureOutputToFile {
public static void main(String[] args) {
String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
Index index = new Index(indexFolder);
// Assuming documents are already indexed, retrieve the first document
DocumentInfo[] documents = index.getIndexedDocuments();
if (documents.length > 0) {
DocumentInfo document = documents[0];
// Output document text to an HTML file
FileOutputAdapter fileOutputAdapter = new FileOutputAdapter(OutputFormat.Html, YOUR_OUTPUT_DIRECTORY + "/Text.html");
index.getDocumentText(document, fileOutputAdapter);
}
}
}
Explanation
- FileOutputAdapter: インデックス化された文書のテキストを HTML に変換し、指定されたファイルパスに書き込み、見出しや表といった基本的な書式を保持します。
文書テキストのストリーム出力
StreamOutputAdapter は抽出した文書テキストを一時ファイルを作成せずに ByteArrayOutputStream にストリームします。
概要
コンテンツを一時的にだけ必要とする場合(例:HTTP で送信したり Web 応答に埋め込んだりする場合)は StreamOutputAdapter を使用します。テキストを ByteArrayOutputStream にストリームし、一時ファイル作成のオーバーヘッドを回避します。
import com.groupdocs.search.*;
import java.io.ByteArrayOutputStream;
public class FeatureOutputToStream {
public static void main(String[] args) {
String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
Index index = new Index(indexFolder);
// Assuming documents are already indexed, retrieve the first document
DocumentInfo[] documents = index.getIndexedDocuments();
if (documents.length > 0) {
DocumentInfo document = documents[0];
// Output document text to a stream in HTML format
ByteArrayOutputStream stream = new ByteArrayOutputStream();
StreamOutputAdapter streamOutputAdapter = new StreamOutputAdapter(OutputFormat.Html, stream);
index.getDocumentText(document, streamOutputAdapter);
}
}
}
Explanation
- StreamOutputAdapter: 文書テキストを
ByteArrayOutputStreamにストリームし、ファイルシステムに触れずに柔軟に扱えるようにします。
文書テキストの文字列出力
StringOutputAdapter は文書全体のテキストを単一の String オブジェクトに捕捉します。
概要
ロギング、デバッグ、UI 表示など、迅速にテキストを利用したい場合は StringOutputAdapter が文書全体を単一の String に捕捉します。
import com.groupdocs.search.*;
public class FeatureOutputToString {
public static void main(String[] args) {
String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
Index index = new Index(indexFolder);
// Assuming documents are already indexed, retrieve the first document
DocumentInfo[] documents = index.getIndexedDocuments();
if (documents.length > 0) {
DocumentInfo document = documents[0];
// Output document text to a string in HTML format
StringOutputAdapter stringOutputAdapter = new StringOutputAdapter(OutputFormat.Html);
index.getDocumentText(document, stringOutputAdapter);
String result = stringOutputAdapter.getResult();
}
}
}
Explanation
- StringOutputAdapter: 文書テキストを
Stringに捕捉し、ログやコンソール出力、UI コンポーネントへの埋め込みが容易になります。
文書テキストの構造化フォーマット出力
StructuredOutputAdapter は段落、表、カスタムメタデータを含むリッチなオブジェクトモデルを返します。
概要
StructuredOutputAdapter は段落、表、カスタムメタデータを含むリッチなオブジェクトモデルを返します。この形式は下流の自然言語処理(NLP)やデータ抽出ワークフローに最適です。
import com.groupdocs.search.*;
public class FeatureOutputToStructure {
public static void main(String[] args) {
String indexFolder = YOUR_DOCUMENT_DIRECTORY + "/OutputAdapters/Index";
Index index = new Index(indexFolder);
// Assuming documents are already indexed, retrieve the first document
DocumentInfo[] documents = index.getIndexedDocuments();
if (documents.length > 0) {
DocumentInfo document = documents[0];
// Output document text to a structured format like PlainText
StructuredOutputAdapter structuredOutputAdapter = new StructuredOutputAdapter(OutputFormat.PlainText);
index.getDocumentText(document, structuredOutputAdapter);
}
}
}
Explanation
- StructuredOutputAdapter: 文書テキストを structured text extraction 形式に抽出し、細粒度の分析、フィールド抽出、機械学習パイプラインとの統合を可能にします。
よくある問題と解決策
| Issue | Cause | Fix |
|---|---|---|
| インデックスが作成されない | フォルダーパスが間違っている、または書き込み権限がない | indexFolder が存在し、アプリケーションに書き込み権限があることを確認 |
| 文書が返されない | index.add() が呼び出されていない、またはソースフォルダーが誤っている | documentsFolder が正しいディレクトリを指し、サポート形式のファイルが含まれていることを確認 |
| 出力ファイルが空 | 出力アダプタのパスが無効、またはディレクトリが存在しない | 実行前に対象ディレクトリ (YOUR_OUTPUT_DIRECTORY) を作成 |
| 大容量ファイルでメモリが急増 | ファイル全体をメモリに読み込んでいる | StreamOutputAdapter を使用してデータをインクリメンタルに処理 |
よくある質問
Q: Kotlin や Scala など他の JVM 言語でも GroupDocs.Search を使用できますか?
A: はい、ライブラリは純粋な Java で実装されており、任意の JVM 言語とシームレスに動作します。
Q: 圧縮は検索速度にどのように影響しますか?
A: 高圧縮はディスク使用量を最大 70 % 縮小しますが、インデックス作成時の CPU オーバーヘッドは最小限です。クエリ遅延は典型的なワークロードで 100 ms 未満に抑えられます。
Q: 既存のインデックスを再構築せずに更新できますか?
A: もちろんです。新規ファイルには index.add()、古いファイルの削除には index.remove() を使用し、インクリメンタル更新が可能です。
Q: 自然言語処理パイプラインに最適な出力形式はどれですか?
A: structured text extraction アダプタの PlainText 結果は、クリーンで言語に依存しないコンテンツを提供し、NLP タスクに最適です。
Q: 開発・テストにライセンスは必要ですか?
A: 開発・評価には無料のトライアルライセンスで十分です。本番環境では購入したライセンスが必要です。
結論
これで インデックスの作成方法、文書の追加、そして必要なすべての形式でテキストを抽出する完全な本番レベルのワークフローが手に入りました。まず Index を圧縮設定で構成し、文書コレクションを追加し、下流シナリオに合わせて適切な出力アダプタ(HTML レポート生成、NLP モデルへの入力、Web クライアントへのストリーミングなど)を選択してください。インクリメンタル更新 API を活用すれば、コストのかかる再構築なしでインデックスを常に最新に保てます。これにより、あらゆる文書リポジトリで高速かつ信頼性の高い検索が実現します。
Last Updated: 2026-06-27
Tested With: GroupDocs.Search 25.4 for Java
Author: GroupDocs