GroupDocs.Search ガイドで属性検索(Java)

クイック回答

  • 「search by attribute java」とは何ですか? インデックスされた各ドキュメントに付随するキー‑バリュー メタデータで検索結果をフィルタリングできます。
  • インデックス後に属性を変更できますか? はい – AttributeChangeBatch を使用して、インデックス全体を再構築せずに一括変更を適用できます。
  • インデックス時に属性を追加するには? FileIndexing イベント用のハンドラを登録し、各ファイルに対してプログラムで属性を設定します。
  • ライセンスは必要ですか? 無料トライアルで評価できますが、本番環境では永続ライセンスが必要です。
  • 必要な Java バージョンは? Java 8 以降が推奨されます。

「search by attribute java」とは?

「search by attribute java」は、テキストコンテンツだけでなくカスタムメタデータ(属性)に基づいてドキュメントをクエリできるようにします。このアプローチにより、結果セットが大幅に絞り込まれ、ネットワークトラフィックが削減され、エンジンが属性フィルタを全文検索の前に評価するため応答時間が向上します。

動的メタデータタグ付けを使用する理由

動的メタデータタグ付けにより、再インデックスせずにドキュメントのカスタム属性を割り当て、更新、管理でき、ビジネスルールの変化に適応する柔軟な分類が可能になります。これにより検索効率が向上し、大規模リポジトリでの高コストなデータ移行の必要性が減少し、コンプライアンスと監査可能性も維持されます。

  • 動的分類 – ビジネスルールの変化に合わせてメタデータを同期させます。
  • 高速フィルタリング – 属性フィルタは全文検索の前に評価され、応答時間が向上します。
  • コンプライアンス追跡 – 保存ポリシーや監査要件のためにドキュメントにタグ付けします。
  • 属性の一括更新 – すべてを再インデックスせずに、多数のドキュメントを一度の操作で変更できます。

前提条件

  • Java 8+(JDK 8 以上)
  • GroupDocs.Search for Java ライブラリ(下記 Maven 設定を参照)
  • Java コレクションと例外処理の基本的な知識

GroupDocs.Search for Java の設定

Maven 設定

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

<repositories>
    <repository>
        <id>groupdocs-releases</id>
        <url>https://repo.groupdocs.com/maven</url>
    </repository>
</repositories>

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

直接ダウンロード

代わりに、GroupDocs.Search for Java releases から最新バージョンをダウンロードできます。Maven を使用しない場合は、GroupDocs website から JAR を取得してください。

ライセンス取得

  • 無料トライアルで機能を確認できます。
  • 継続的に使用する場合は、license page から一時またはフルライセンスを取得してください。

基本的な初期化

// Initialize the search index folder
String indexFolder = "C:/search_index";
Index index = new Index(indexFolder);

// Apply license if you have one
License license = new License();
license.setLicense("C:/licenses/groupdocs.lic");

ドキュメント属性の変更方法(一括更新)

インデックス後にドキュメント属性を変更するには、AttributeChangeBatch API を使用して一括更新を行います。この方法は、選択したファイルのメタデータを単一トランザクションで更新し、コレクション全体を再インデックスするオーバーヘッドを回避しながら全文インデックスを保持します。

直接的な回答: AttributeChangeBatch を使用してメタデータの追加、削除、置換を単一の原子操作にまとめ、バッチをインデックスにコミットします。これにより、多数のドキュメントの属性を一度に更新し、既存の全文インデックスを保持できます。

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

index.add("C:/docs/contract1.pdf");
index.add("C:/docs/report2.docx");

手順 2: インデックス済みドキュメント情報を取得

DocumentInfo info = index.getDocumentInfo("contract1.pdf");
System.out.println("Current attributes: " + info.getAttributes());

手順 3: ドキュメント属性を一括更新

AttributeChangeBatch クラスは複数の属性変更を単一の原子操作にまとめ、I/O オーバーヘッドを削減し、インデックスの一貫性を確保します。

AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addAttribute("contract1.pdf", "department", "Legal");
batch.removeAttribute("report2.docx", "confidential");
batch.replaceAttribute("report2.docx", "status", "archived", "active");
index.applyAttributeChanges(batch);

手順 4: 属性フィルタで検索

SearchOptions options = new SearchOptions();
options.addAttributeFilter("department", "Legal");
SearchResult result = index.search("agreement", options);
System.out.println("Found " + result.getCount() + " legal documents.");

インデックス時に属性を追加する方法

インデックス処理中に属性を追加すると、最初からすべてのドキュメントに必要なメタデータが付与されます。FileIndexing イベントをハンドリングすることで、エンジンがファイルを処理する前に各 DocumentInfo オブジェクトにキー‑バリュー ペアをプログラムで添付でき、以降の検索で属性が確実に利用可能になります。

直接的な回答: FileIndexing イベントに登録し、ハンドラ内で DocumentInfo オブジェクトの addAttribute を呼び出してキー‑バリュー ペアを付与し、インデックスの処理を続行させます。

手順 1: FileIndexing イベントに登録

FileIndexing イベントはファイルがインデックスに追加されるたびにトリガーされ、カスタムメタデータを注入できます。

index.getEvents().FileIndexing.add(event -> {
    // Example: set department based on folder name
    String folder = new File(event.getFilePath()).getParentFile().getName();
    event.getDocumentInfo().addAttribute("department", folder);
});

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

index.add("C:/incoming/hr/policy.pdf");
index.add("C:/incoming/finance/budget.xlsx");

実用例

  1. ドキュメント管理システム – 取り込み時に自動でファイルにタグ付けし、即座にファセットナビゲーションを実現。
  2. 大規模コンテンツアーカイブ – 属性フィルタと全文検索を組み合わせ、マルチギガバイトコレクションのクエリ時間を数分から数秒に短縮。
  3. コンプライアンス & レポーティング – 保存期間、機密レベル、監査フラグを動的に割り当て、規制チェック用にクエリ可能に。

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

  • メモリ管理 – JVM ヒープを監視し、-Xmx(例: -Xmx4g)をインデックスが 2 GB を超える場合に調整します。
  • バッチ処理 – AttributeChangeBatch で属性変更をまとめ、ディスク書き込み回数を最小化します。10 000 件を超える変更はトランザクションタイムアウトを防ぐために分割してください。
  • ライブラリ更新 – 常に最新の GroupDocs.Search リリースを使用してください。バージョン 25.4 は属性フィルタ評価で 30 % の速度向上を実現しています(24.x と比較)。

よくある問題と解決策

問題発生理由解決策
属性が適用されないインデックス前にイベントハンドラが登録されていないindex.getEvents().FileIndexing.add(...) を any index.add(...) 呼び出しより 前 に実行してください。
検索結果がゼロ属性名の不一致(大文字小文字が区別される)フィルタ作成時に正確な属性名を使用してください(例: createAttribute("main"))。
大規模バッチで Out‑of‑memory エラー1 バッチに変更が多すぎるバッチを小分けにし、例えば 5 000 ドキュメントごとに AttributeChangeBatch を作成してください。
ライセンスが認識されないトライアル JAR を使用し、ライセンスファイルを適用していないインデックス操作の前に License license = new License(); license.setLicense("path/to/license.file"); を呼び出してください。

FAQ

Q: GroupDocs.Search を Java で使用するための前提条件は何ですか?
A: Java 8 以上、GroupDocs.Search ライブラリ、インデックス概念の基本知識が必要です。

Q: Maven で GroupDocs.Search をインストールする方法は?
A: Maven 設定セクションに示したリポジトリと依存関係を pom.xml に追加してください。

Q: ドキュメントがインデックスされた後に属性を変更できますか?
A: はい、AttributeChangeBatch を使用して再インデックスせずに属性を一括更新できます。

Q: インデックス処理が遅い場合はどうすればよいですか?
A: JVM メモリ (-Xmx) を最適化し、バッチ更新を利用し、最新バージョンにアップグレードしてパフォーマンスパッチを適用してください。

Q: GroupDocs.Search for Java の追加リソースはどこで見つかりますか?
A: 公式ドキュメント またはコミュニティフォーラムをご覧ください。

リソース


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

<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>
import com.groupdocs.search.Index;

// Initialize an index in a specified directory
Index index = new Index("YOUR_OUTPUT_DIRECTORY/ChangeAttributes");
index.add("YOUR_DOCUMENT_DIRECTORY");
import com.groupdocs.search.results.DocumentInfo;

DocumentInfo[] documents = index.getIndexedDocuments();
import com.groupdocs.search.common.AttributeChangeBatch;
import com.groupdocs.search.SearchOptions;

AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addToAll("public"); // Add 'public' to all documents
batch.remove(documents[0].getFilePath(), "public"); // Remove 'public' from a specific document
batch.add(documents[0].getFilePath(), "main", "key"); // Add 'main' and 'key' attributes

// Apply changes
index.changeAttributes(batch);
import com.groupdocs.search.results.SearchResult;

SearchOptions options = new SearchOptions();
options.setSearchDocumentFilter(SearchDocumentFilter.createAttribute("main"));
String query = "length";
SearchResult result = index.search(query, options); // Perform the search
import com.groupdocs.search.events.EventHandler;
import com.groupdocs.search.events.FileIndexingEventArgs;

index.getEvents().FileIndexing.add(new EventHandler<FileIndexingEventArgs>() {
    @Override
    public void invoke(Object sender, FileIndexingEventArgs args) {
        if (args.getDocumentFullPath().endsWith("SampleDocument.pdf")) {
            args.setAttributes(new String[] { "main", "key" });
        }
    }
});
index.add("YOUR_DOCUMENT_DIRECTORY");

関連チュートリアル