すべてのプロダクト
Search
ドキュメントセンター

Tablestore:ドキュメント管理

最終更新日:May 13, 2026

以下の API を使用して、ナレッジベース内のドキュメントを管理します。ドキュメントのインポート、ステータスの問い合わせ、ドキュメント一覧の取得、メタデータの更新、ドキュメントの削除などの操作が可能です。

サポートされるドキュメント形式

  • PDF: .pdf

  • Word: .doc.docx

  • Excel: .xls.xlsx

  • PowerPoint: .ppt.pptx

  • プレーンテキスト: .txt

  • Markdown: .md

ドキュメントステータスのライフサイクル

ドキュメントがアップロードされた後、検索可能になるまでに以下のステータスを遷移します。

ステータス

説明

実行可能な操作

保留中

タスクが処理待ちの状態です。

ステータスの問い合わせ、削除

インデックス作成

システムがドキュメントの解析、チャンキング、ベクトル化を実行中です。

ステータスの問い合わせ、削除

完了

インデックス作成が完了しました。ドキュメントは検索可能です。

検索、メタデータ更新、削除、チャンク表示

失敗

インデックス作成が失敗しました。

失敗理由の確認、削除、再アップロード

削除中

システムがドキュメントと関連するチャンクを削除中です。

削除の完了を待ちます。

説明

ドキュメントのステータスが 保留中 または インデックス作成 の場合、検索はできません。ステータスが 完了 に変わるまで待つ必要があります。

ドキュメントの追加

ナレッジベースにドキュメントをインポートします。システムは自動的に解析、チャンキング、埋め込みベクトル化、インデックス構築を実行します。同じ ossKey のドキュメントをアップロードすると、既存のドキュメントが上書きされます。

SDK では、ドキュメントをインポートする 3 つの方法を提供しています。

方法

SDK メソッド

説明

ローカルファイルのアップロード

upload_documents()

ローカルファイルのパスを指定します。SDK が自動的に OSS にアップロードし、ナレッジベースに追加します。

OSS ファイルの追加

add_documents()

既存の OSS ファイルのパスを指定します。

OSS ディレクトリからの一括インポート

add_documents()

OSS ディレクトリのパスを指定します。システムがディレクトリ内のすべてのファイルを再帰的にスキャンして追加します。

リクエストパラメータ

パラメータ

説明

knowledgeBaseName

string

ナレッジベースの名前。必須

subspace

string

サブスペースの名前。最大長は 128 文字です。ナレッジベースでサブスペースが有効になっている場合は必須です。

documents

list<object>

ドキュメントのリスト。必須。1 回のリクエストで最大 10 個のドキュメントを含めることができ、各ファイルは 50 MB を超えてはいけません。

説明

これらの制限の引き上げをご希望の場合は、チケットを送信するか、Tablestore 技術交流グループ (DingTalk グループ ID: 36165029092) に参加してテクニカルサポートにお問い合わせください。

documents[].filePath

string

ローカルファイルのパス。upload_documents を使用する場合は必須です。

documents[].ossKey

string

OSS ファイルまたはディレクトリのパス。長さは 1 ~ 256 文字である必要があります。add_documents を使用する場合は必須です。

説明

documents[].metadata

object

ドキュメントのメタデータ。ナレッジベースに定義されたメタデータスキーマに準拠する必要があります。

documents[].inclusionFilters

list<string>

包含フィルター。OSS ディレクトリをスキャンする際に、先頭と末尾で * ワイルドカードをサポートします (例: *.pdf)。

documents[].exclusionFilters

list<string>

除外フィルター。先頭と末尾で * ワイルドカードをサポートします (例: *draft*)。

コード例

ローカルファイルのアップロード

ローカルファイルのパスを指定します。SDK が自動的に 2 つのステップ (ファイルを OSS にアップロードし、その後ナレッジベースに追加) を処理します。

説明

upload_documents を使用する場合、AgentStorageClient を初期化する際に oss_endpointoss_bucket_name の両方を指定する必要があります。指定しない場合、ValueError が発生します。

resp = client.upload_documents({
    "knowledgeBaseName": "product_docs_kb",
    "documents": [
        {
            "filePath": "/home/user/docs/product_manual.pdf",
            "metadata": {"author": "田中愛", "category": "Product Manual"}
        },
        {
            "filePath": "/home/user/docs/faq.docx",
            "metadata": {"author": "山田太郎", "category": "FAQ"}
        }
    ]
})

OSS ファイルの追加

ファイルが既に OSS に存在する場合は、その ossKey を直接指定します。

resp = client.add_documents({
    "knowledgeBaseName": "product_docs_kb",
    "documents": [
        {
            "ossKey": "oss://example-bucket/docs/product_manual.pdf",
            "metadata": {"author": "田中愛"}
        }
    ]
})

OSS ディレクトリからの一括インポート

OSS ディレクトリのパスを指定します。システムがディレクトリ内のすべてのファイルを再帰的にスキャンします。inclusionFiltersexclusionFilters を使用して、ファイル名のパターンに基づいてフィルタリングできます。

resp = client.add_documents({
    "knowledgeBaseName": "product_docs_kb",
    "documents": [
        {
            "ossKey": "oss://example-bucket/docs/",
            "inclusionFilters": ["*.pdf", "*.docx"],
            "exclusionFilters": ["*draft*"]
        }
    ]
})

レスポンス

レスポンスフィールド

フィールド

説明

documentDetails

list<object>

各ドキュメントの処理結果。

documentDetails[].docId

string

ドキュメント ID。

documentDetails[].ossKey

string

ドキュメントの OSS パス。

documentDetails[].status

string

succeed または failed

documentDetails[].failureReason

string

失敗の理由。このフィールドは、ステータスが failed の場合にのみ存在します。

レスポンス例

{
  "code": "SUCCESS",
  "data": {
    "documentDetails": [
      {"docId": "fc6ed97f-...", "status": "succeed", "ossKey": "oss://example-bucket/docs/product_manual.pdf"},
      {"docId": "940f2c5c-...", "status": "succeed", "ossKey": "oss://example-bucket/docs/faq.docx"}
    ]
  },
  "message": "succeed"
}

部分的に失敗したレスポンスの例 (HTTP ステータスコードは 200 のまま、codeSUCCESS のままです):

{
  "code": "SUCCESS",
  "data": {
    "documentDetails": [
      {"status": "failed", "failureReason": "Metadata field 'date' date string format is not supported", "ossKey": "oss://..."},
      {"status": "succeed", "ossKey": "oss://...", "docId": "940f2c5c-..."}
    ]
  },
  "message": "succeed"
}

使用上の注意

  • 200 OK の HTTP レスポンスに code: SUCCESS が含まれていても、すべてのドキュメントが正常に処理されたことを保証するものではありません。 status 配列内の各ドキュメントの documentDetails フィールドを確認する必要があります。

  • status: "succeed" は、アップロードタスクが受け付けられたことを示しますが、インデックス作成が完了したことを意味するものではありません。ドキュメントのステータスが 完了 に変わった後にのみ、ドキュメントを取得できます。

  • ナレッジベースでサブスペースが有効になっている場合は、subspace パラメータを渡す必要があります。指定しない場合、INVALID_PARAMETER エラーが返されます。

  • サポートされていない形式を使用するとドキュメントのステータスが failed になるため、yyyy-MM-dd HH:mm:ss のようなサポートされているメタデータの日付形式を使用する必要があります。

インデックス作成ステータスの確認

ドキュメントのアップロードは非同期処理です。アップロード後、検索可能になる前に処理が必要です。インデックス作成が完了したかどうかを確認するには、エクスポネンシャルバックオフを使用したポーリング戦略を推奨します。

import time

def wait_for_document(client, kb_name, doc_id, max_interval=30):
    """エクスポネンシャルバックオフでドキュメントのステータスをポーリングし、インデックス作成が完了するまで待機します。"""
    interval = 3
    while True:
        resp = client.get_document({
            "knowledgeBaseName": kb_name,
            "docId": doc_id
        })
        status = resp["data"][0]["status"]
        if status == "完了":
            print(f"インデックス作成が完了しました。チャンク数: {resp['data'][0].get('chunkNum', 'N/A')}")
            return resp
        elif status == "失敗":
            raise Exception(f"インデックス作成が失敗しました: {resp['data'][0].get('failedDetails')}")
        print(f"現在のステータス: {status}、{interval} 秒後に再試行します...")
        time.sleep(interval)
        interval = min(interval * 2, max_interval)

処理時間は、ファイルのサイズ、種類、数によって異なります。小さなファイルは通常数秒で処理されますが、大きなファイルや一括インポートの場合は数分かかることがあります。

ドキュメントの問い合わせ

get_document メソッドを呼び出して、特定のドキュメントの詳細 (処理ステータス、チャンク数、メタデータなど) を取得します。

リクエストパラメータ

パラメータ

説明

knowledgeBaseName

string

ナレッジベースの名前。必須

subspace

string

サブスペースの名前。ナレッジベースでサブスペースが有効になっている場合は必須です。

docId

string

ドキュメント ID。このパラメーターまたは ossKey のいずれかを指定する必要があります。

ossKey

string

OSS ファイルパス。このパラメーターまたは docId のいずれかを指定する必要があります。

コード例

resp = client.get_document({
    "knowledgeBaseName": "product_docs_kb",
    "docId": "fc6ed97f-..."
})

doc = resp["data"][0]
print(f"ステータス: {doc['status']}、チャンク数: {doc.get('chunkNum', 'N/A')}")

レスポンス

フィールド

説明

docId

string

ドキュメント ID。

ossKey

string

OSS パス。

subspace

string

サブスペース。

chunkNum

int

チャンク数。

status

string

ドキュメントのステータス: 保留中インデックス作成完了失敗、または 削除中

createdAt

int

作成タイムスタンプ。

updatedAt

int

更新タイムスタンプ。

eTag

string

ドキュメントの eTag。

failedDetails

string

失敗の理由。このフィールドは、ステータスが 失敗 の場合にのみ存在します。

metadata

object

ドキュメントのメタデータ。

使用上の注意

同じ ossKey が作成、削除され、その後再度作成された場合、get_document は履歴レコードを含む複数のレコードを返す可能性があります。有効なドキュメントを特定するには、status フィールドを確認し、ステータスが 完了 のレコードを使用してください。

ドキュメント一覧の取得

list_documents メソッドを呼び出して、ナレッジベース内のドキュメントのページネーション一覧を取得します。

リクエストパラメータ

パラメータ

説明

knowledgeBaseName

string

ナレッジベースの名前。必須

subspace

list<string>

サブスペース名のリスト。最大 10 個のサブスペースを指定できます。ナレッジベースでサブスペースが有効になっている場合は必須です。

maxResults

int

返される結果の数。デフォルト値は 10、最大値は 1000 です。

nextToken

string

次のページの結果を取得するためのページネーショントークン。

コード例

resp = client.list_documents({
    "knowledgeBaseName": "product_docs_kb",
    "maxResults": 20
})

for doc in resp["data"]["documentDetails"]:
    print(f"[{doc['status']}] {doc['ossKey']} (チャンク数: {doc.get('chunkNum', '-')})")

使用上の注意

subspace パラメータは、最大 10 個の値のリストをサポートします。この制限を超えた場合、エラーが返されます。

ドキュメントメタデータの更新

update_document メソッドを呼び出して、特定のドキュメントのメタデータを更新します。

説明

ステータスが 完了 のドキュメントのみメタデータを更新できます。他のステータスのドキュメントに対してこのメソッドを呼び出すと、エラーが返されます。

リクエストパラメータ

パラメータ

説明

knowledgeBaseName

string

ナレッジベースの名前。必須

subspace

string

サブスペースの名前。ナレッジベースでサブスペースが有効になっている場合は必須です。

ossKey

string

ドキュメントの OSS パス。 このパラメーターまたは docId のいずれかを指定する必要があります。

docId

string

ドキュメント ID。このパラメーターまたは ossKey のいずれかを指定する必要があります。

metadata

map

新しいメタデータ。必須

コード例

resp = client.update_document({
    "knowledgeBaseName": "product_docs_kb",
    "docId": "fc6ed97f-...",
    "metadata": {"author": "田中愛", "category": "Technical Docs", "version": 2}
})

print(f"更新ステータス: {resp['data']['updateStatus']}")  # UPDATED または NO_OP

レスポンス

フィールド

説明

docId

string

ドキュメント ID。

ossKey

string

OSS パス。

updatedAt

long

更新タイムスタンプ。

updateStatus

string

NO_OP または UPDATED

使用上の注意

  • メタデータの更新は上書き操作です。指定した新しいメタデータが、既存のメタデータを完全に置き換えます。単一のフィールドのみを更新したい場合は、他のすべての既存フィールドもリクエストに含める必要があります。

  • "metadata": null を渡すと、すべてのメタデータがクリアされます。

  • metadata フィールドを指定しない場合、元の値が保持されます。

  • 制限事項: メタデータの合計サイズ (キーと値) は 4 KB を超えることはできません。フィールドの最大数は 200 です。

ドキュメントの削除

delete_documents メソッドを呼び出して、指定したドキュメントとそれに関連するすべてのチャンクを削除します。

リクエストパラメータ

パラメータ

説明

knowledgeBaseName

string

ナレッジベースの名前。必須

subspace

string

サブスペースの名前。ナレッジベースでサブスペースが有効になっている場合は必須です。

documents

list<object>

削除するドキュメントのリスト。必須

documents[].docId

string

ドキュメント ID。このパラメーターまたは ossKey のいずれかを指定する必要があります。

documents[].ossKey

string

OSS パス。このパラメーターまたは docId のいずれかを指定する必要があります。

コード例

resp = client.delete_documents({
    "knowledgeBaseName": "product_docs_kb",
    "documents": [
        {"docId": "fc6ed97f-..."},
        {"ossKey": "oss://example-bucket/docs/faq.docx"}
    ]
})

# 各ドキュメントの削除結果を確認
for detail in resp["data"]["documentDetails"]:
    print(f"{detail['ossKey']}: {detail['status']}")

使用上の注意

AddDocuments API と同様に、削除結果についても documentDetails 内の各ドキュメントの status を個別に確認する必要があります。

関連ドキュメント

  • ドキュメントのチャンクを表示および管理するには、「チャンク管理」をご参照ください。