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

Tablestore:取得とリランク

最終更新日:May 13, 2026

Retrieve API を使用してナレッジベースでセマンティック検索を実行し、クエリに対して最も関連性の高いチャンクを返します。この API は、ベクトル取得、全文検索、ハイブリッド検索、メタデータフィルター、および各種リランク戦略をサポートします。

取得設定の優先順位

Retrieve API の取得設定 (retrievalConfiguration) は、以下の優先度に基づいて有効になるパラメーターを決定します:

優先順位

ソース

説明

1 (最優先)

Retrieve API パラメータ

提供されたretrievalConfigurationは、現在のリクエストでのみ有効です。

2

ナレッジベースレベルの設定

ナレッジベースの作成時に設定します。UpdateKnowledgeBase API を使用して、いつでも変更できます。

3 (最低)

システムのデフォルト

WEIGHT 戦略による重み付きフュージョン (ベクトル取得 0.7:全文検索 0.3) を用いたハイブリッド検索 (ベクトル取得 + 全文検索) を実行し、20 件の結果を返します。

最もシンプルな検索リクエストには、knowledgeBaseNameretrievalQuery のみが必要です。システムは自動的にナレッジベースの設定またはデフォルト値を使用します。

検索タイプ

タイプ

説明

ユースケース

DENSE_VECTOR

意味的類似性に基づくベクトル取得。

意味的な意図の理解が重要な、自然言語で表現されたクエリに最適です。たとえば、「how to install」というクエリでも、「deployment steps」に関するコンテンツにマッチできます。

FULL_TEXT

キーワードマッチングに基づく全文検索。

厳密なキーワード、固有名詞、識別子を含むクエリに使用します。

ベクトル取得と全文検索は相補的です。ベクトル取得は意味理解に優れ、全文検索は厳密一致に有効です。両方の検索タイプを有効にし、リランクで結果をフュージョンすることを推奨します。

リランク戦略

リランクは、ベクトル取得と全文検索の結果をフュージョンし、並べ替えて最終的な結果セットを生成します。

WEIGHT (重み付きフュージョン)

この戦略では、ベクトル取得と全文検索の両方の結果に重み付きスコアを適用します。各検索手法の寄与度を細かく制御したいシナリオに最適です。これが推奨されるデフォルト戦略です。

設定パラメータ:

パラメータ

デフォルト

説明

denseVectorSearchWeight

double

0.7

ベクトル取得の重み付け比率。

fullTextSearchWeight

double

0.3

全文検索の重み付け比率。

RRF (Reciprocal Rank Fusion)

この戦略では、複数の検索手法の結果を、それぞれの順位の逆数に基づいて重み付けし、フュージョンします。追加のモデル呼び出しなしで、安定したパフォーマンスと低レイテンシーを実現します。

設定パラメータ:

パラメータ

デフォルト

説明

denseVectorSearchWeight

double

1.0

ベクトル取得の重み。

fullTextSearchWeight

double

1.0

全文検索の重み。

k

int

60

RRF アルゴリズムのパラメータ。0 より大きい値を指定する必要があります。

設定例:

{
  "rerankingConfiguration": {
    "type": "RRF",
    "numberOfResults": 5,
    "rrfConfiguration": {
      "denseVectorSearchWeight": 0.6,
      "fullTextSearchWeight": 0.4,
      "k": 20
    }
  }
}

MODEL (モデルリランク)

gte-rerank-v2 などのリランクモデルを呼び出して候補結果を再ランキングすると、最高のランキング品質が得られますが、追加のレイテンシーと計算コストが発生します。

設定パラメータ:

パラメータ

デフォルト

説明

provider

string

Bailian

リランクモデルのプロバイダー。Bailian は Model Studio を指します。現在サポートされているのはこのプロバイダーのみです。

model

string

gte-rerank-v2

リランクモデルの名前。

戦略の選択

シナリオ

推奨戦略

レイテンシーに敏感な汎用シナリオ。

RRF

ベクトル取得と全文検索の結果の比率を細かく制御する必要があるシナリオ。

WEIGHT

最高のランキング品質が求められ、追加のレイテンシーを許容できるシナリオ。

MODEL

メタデータフィルター

検索時に、filter パラメーターを使用してメタデータ条件で結果をフィルタリングし、候補プールを絞り込みます。フィルタリングフィールドは、ナレッジベースの作成時に metadata で定義されている必要があります。

比較演算子

演算子

記号

説明

適用可能な型

equals

=

等しい

すべての型

notEquals

等しくない

すべての型

greaterThan

>

より大きい

long、 double、 date

greaterThanOrEquals

以上

long、 double、 date

lessThan

<

より小さい

long、 double、 date

lessThanOrEquals

以下

long、 double、 date

集合演算子とマッチング演算子

演算子

説明

適用可能な型

in

指定した集合に値が含まれます。

すべての型

notIn

指定した集合に値が含まれません。

すべての型

startsWith

文字列のプレフィックスにマッチします。

string

stringContains

部分文字列にマッチします。

string

listContains

リスト型フィールドに、指定した要素が含まれるかどうかを確認します。

list

論理結合演算子

演算子

説明

andAll

すべての条件を満たす必要があります。

orAll

少なくとも 1 つの条件を満たす必要があります。

notAll

すべての条件を満たすわけではありません。

andAllorAll、およびnotAllをネストして、複雑な複合フィルタリングロジックを構築できます。

フィルターの例

category が "technology" または "science" で、score が ≥ 60、かつ title が "Product" で始まるドキュメントを検索します:

{
  "filter": {
    "andAll": [
      {"in": {"key": "category", "value": ["technology", "science"]}},
      {"greaterThanOrEquals": {"key": "score", "value": 60}},
      {"startsWith": {"key": "title", "value": "Product"}}
    ]
  }
}

orAll を使用して OR ロジックを実装し、ステータスが "active" であるか、スコアが 90 より大きいドキュメントをクエリします。

{
  "filter": {
    "orAll": [
      {"equals": {"key": "status", "value": "active"}},
      {"greaterThan": {"key": "score", "value": 90}}
    ]
  }
}

Retrieve API

リクエストパラメータ

パラメータ

説明

knowledgeBaseName

string

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

subspace

list<string>

サブスペースのリスト。最大 32 個。サブスペースが有効な場合は必須です。

retrievalQuery

object

取得クエリ。必須。

retrievalQuery.type

string

クエリタイプ(必須)TEXT のみがサポートされています。

retrievalQuery.text

string

クエリテキスト。必須。 最大 128 文字。

retrievalConfiguration

object

取得設定。指定しない場合は、ナレッジベースレベルの設定またはシステムのデフォルトが使用されます。

retrievalConfiguration.searchType

list<string>

検索タイプ。

retrievalConfiguration.denseVectorSearchConfiguration.numberOfResults

int

ベクトル取得で返す結果数。最大:100。

retrievalConfiguration.fullTextSearchConfiguration.numberOfResults

int

全文検索で返す結果数。最大:100。

retrievalConfiguration.rerankingConfiguration

object

リランク設定。

retrievalConfiguration.filter

object

メタデータフィルター条件。

レスポンス

レスポンスフィールド

フィールド

説明

retrievalResults

list<object>

関連性スコアの降順にソートされた取得結果のリスト。

retrievalResults[].docId

string

チャンクが属するドキュメントの ID。

retrievalResults[].chunkId

int

チャンクの ID。

retrievalResults[].ossKey

string

ソースドキュメントの OSS パス。

retrievalResults[].score

フロート

関連性スコア。スコアが高いほど一致度が高いことを示します。

retrievalResults[].content

string

チャンクの元のコンテンツ。

retrievalResults[].subspace

string

チャンクが属するサブスペース。

retrievalResults[].metadata

object

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

コード例

最小例

この例では、リクエスト内で取得パラメータを設定しません。システムはナレッジベースレベルの設定またはシステムのデフォルトを使用します:

resp = client.retrieve({
    "knowledgeBaseName": "product_docs_kb",
    "retrievalQuery": {"type": "TEXT", "text": "What are the installation steps for the product?"}
})

for r in resp["data"]["retrievalResults"]:
    print(f"[{r['score']:.4f}] {r['content'][:80]}...")

完全な例

この例では、リクエスト内で取得パラメータを設定して、ナレッジベースレベルの設定を上書きします:

resp = client.retrieve({
    "knowledgeBaseName": "product_docs_kb",
    "subspace": ["default"],
    "retrievalQuery": {"type": "TEXT", "text": "What are the installation steps for the product?"},
    "retrievalConfiguration": {
        "searchType": ["DENSE_VECTOR", "FULL_TEXT"],
        "denseVectorSearchConfiguration": {"numberOfResults": 10},
        "fullTextSearchConfiguration": {"numberOfResults": 10},
        "rerankingConfiguration": {
            "type": "RRF",
            "numberOfResults": 5,
            "rrfConfiguration": {
                "denseVectorSearchWeight": 0.6,
                "fullTextSearchWeight": 0.4,
                "k": 60
            }
        },
        "filter": {
            "andAll": [
                {"in": {"key": "category", "value": ["Product Documentation"]}}
            ]
        }
    }
})

for result in resp["data"]["retrievalResults"]:
    print(f"[score={result['score']:.4f}] {result['content'][:100]}...")
    print(f"  Source: {result['ossKey']}, chunkId: {result['chunkId']}")

モデルクラスの使用

提供されているモデルクラスを使用してリクエストを構築することで、IDEでのコード補完と型チェックが改善されます:

from tablestore_agent_storage.models import (
    RetrieveRequest, RetrievalQuery, RetrievalQueryType
)

resp = client.retrieve(RetrieveRequest(
    knowledge_base_name="product_docs_kb",
    retrieval_query=RetrievalQuery(
        text="What are the installation steps for the product?",
        type=RetrievalQueryType.TEXT
    )
))

レスポンス例

{
  "code": "SUCCESS",
  "data": {
    "retrievalResults": [
      {
        "ossKey": "oss://example-bucket/docs/product_manual.pdf",
        "docId": "96fb386e-...",
        "chunkId": 3,
        "subspace": "default",
        "score": 0.85,
        "content": "Step 1: Download the installation package...",
        "metadata": {"author": "田中太郎", "category": "Product Documentation"}
      }
    ]
  },
  "message": "succeed"
}

注意事項

問題

説明

クエリテキストが長すぎます

text パラメーターの最大長は 128 文字で、これを超える入力はエラーになります。

説明

特定のビジネス要件については、チケットを送信するか、Tablestore 技術交流グループ (ID:36165029092) に参加して、テクニカルサポートにお問い合わせください。

フィルターフィールドが定義されていません

フィルターフィールドは、ナレッジベース作成時にメタデータとして定義しておく必要があります。

RRF の k 値が 0 です

k は 0 より大きい必要があります。そうでない場合は VALIDATION_ERROR が返されます。

ドキュメントのインデックス作成が完了していません

ステータスが Pending または Indexing のドキュメントは取得できません。

subspace パラメータがありません

ナレッジベースでサブスペースが有効な場合、このパラメータは必須です。

パフォーマンスチューニング

numberOfResults パラメータの関係

取得プロセスには、numberOfResults の 3 つのレイヤーがあり、これらの関係を理解することがチューニングの鍵となります:

denseVectorSearchConfiguration.numberOfResults = N1  // ベクトル検索で取得する候補数
fullTextSearchConfiguration.numberOfResults         = N2  // 全文検索で取得する候補数
rerankingConfiguration.numberOfResults           = N3  // リランク後の最終結果数
  • N1 と N2 は候補プールのサイズを決定します。値を大きくすると再現率は向上しますが、計算コストも増加します。

  • N3 は返す最終結果数を決定します。通常、N3 は N1 と N2 の両方より小さくする必要があります。

  • 推奨する初期設定:N1 と N2 を 20 に設定し、N3 を 5〜10 の範囲の値に設定します。結果に基づいて段階的に調整してください。

検索タイプの選択

シナリオ

推奨検索タイプ

説明

自然言語で質問する

DENSE_VECTOR + FULL_TEXT

ベクトル取得は意味を捉え、全文検索はキーワードヒットを担保します。

厳密なキーワードや識別子で検索する

FULL_TEXT を優先する

ベクトル取得は厳密一致に敏感ではありません。

純粋に意味理解が必要なシナリオ

DENSE_VECTOR を優先

たとえば、「how to install」を「deployment steps」にマッチさせます。

メタデータフィルターの使用

  • フィルターは検索フェーズの前に候補プールを刈り込み、精度とパフォーマンスの両方を向上させます。

  • フィルターフィールドは、ナレッジベース作成時にメタデータとして定義しておく必要があり、実行時に追加することはできません。

  • 日付範囲のフィルタリングでは、範囲比較演算子をサポートするために、string 型ではなく date 型を使用します。