メインコンテンツまでスキップ

StructArray の概要

1 つのエンティティに、複数のチャンクを持つ 1 つのドキュメント、複数の visual patch を持つ 1 つのページ、複数のクリップを持つ 1 つの動画のような、構造化された要素の順序付きリストを保存する必要がある場合は StructArray を使用します。StructArray はこれらの要素を親エンティティ内に保持しながら、各要素内のフィールドに対する vector search と scalar filtering も可能にします。

StructArray とは何ですか?

StructArray は、struct の配列とも呼ばれ、各エンティティ内に Struct 要素の順序付きセットを保存します。配列内のすべての Struct 要素は同じ schema に従います。Struct 要素には scalar subfield、vector subfield、またはその両方を含めることができます。

たとえば、ある collection は 1 つの記事を 1 つのエンティティとして保存し、そのチャンクを chunks という名前の StructArray フィールドに保存できます。各チャンクには、テキスト、セクションのメタデータ、品質スコア、および 1 つ以上の vector embedding を含めることができます。

json
{
"doc_id": 1,
"title": "Vector search tuning guide",
"category": "search",
"title_vector": [0.10, 0.20, 0.30, 0.40],
"chunks": [
{
"text": "Use HNSW efSearch to trade recall for latency.",
"section": "index",
"page": 1,
"quality_score": 0.92,
"has_code": true,
"emb_list_vector": [0.11, 0.21, 0.31, 0.41],
"emb": [0.12, 0.20, 0.33, 0.39]
},
{
"text": "Range search returns vectors within a distance boundary.",
"section": "search",
"page": 2,
"quality_score": 0.86,
"has_code": false,
"emb_list_vector": [0.18, 0.23, 0.29, 0.36],
"emb": [0.19, 0.24, 0.30, 0.37]
}
]
}
📘注意

この例の 2 つの vector subfield は、同じチャンクを 2 つの検索観点から表しています。chunks[emb_list_vector]MAX_SIM* メトリクスを使用した EmbeddingList search を想定しており、chunks[emb]COSINEIPL2 などの通常の vector metrics を使用した element-level search を想定しています。

StructArray を使用するタイミング

返したい自然な単位が、検索またはフィルタリングしたい自然な単位よりも大きい場合は StructArray を使用します。

Use caseStructArray が役立つ理由一般的な StructArray フィールド
ドキュメント検索1 つのドキュメントを 1 つのエンティティとして保存しつつ、そのチャンク全体を検索できます。chunks
Late-interaction retrievalドキュメントまたはページを embedding list として保存し、MAX_SIM* でスコアリングできます。chunks[emb_list_vector] または patches[emb]
Element-level retrieval最も関連性の高い chunk、clip、patch、または observation を、その配列オフセットを含めて返します。chunks[emb]
Structured filteringsection、score、page、フラグなど、Struct 要素内の scalar subfield でフィルタリングできます。chunks[section], chunks[quality_score]
重複する親結果の削減各子要素を個別の行として保存する代わりに、同じ親エンティティの配下に子要素を保持します。chunks, clips, patches

判断マトリクス

適切な StructArray の使い方を選ぶには、次のマトリクスを使用してください。

目的推奨される方法結果の粒度ここから開始
多数の構造化された子要素を持つ 1 つの親オブジェクトをモデル化する。StructArray フィールドを作成する。エンティティに順序付き Struct 要素が含まれる。StructArray フィールドの作成
ネストされた子データを含む親レコードを挿入する。StructArray フィールドが Struct オブジェクトのリストであるエンティティを挿入する。エンティティレベルの挿入。StructArray フィールドへのデータ挿入
ColBERT、ColPali、またはドキュメントレベルの late-interaction retrieval を実行する。MAX_SIM* index を使用した EmbeddingList search を使用する。エンティティレベル。Embedding List による検索
個々の chunk、clip、または patch を検索する。通常の vector metric による element-level search を使用する。利用可能な場合はオフセット付きの Struct 要素レベル。StructArray を使用した基本的な Vector Search
scalar 条件に一致する要素に element-level vector search を制限する。element_filter を使用する。要素レベルのフィルタリング。結果の形状は検索タイプによって異なります。StructArray を使用した Filtered Search
条件を満たす Struct 要素の数に基づいてエンティティを選択する。MATCH_ANYMATCH_ALLMATCH_LEASTMATCH_MOST、または MATCH_EXACT を使用する。エンティティレベル。StructArray Operators
StructArray の vector subfield に対して score または distance の境界を使用する。element-level range search を使用する。Struct 要素レベル。StructArray を使用した Range Search
element-level search の後、親エンティティごとに最大 1 件の結果を返す。主キーによる grouping search を使用する。grouping 後はエンティティレベル。StructArray を使用した Grouping Search
StructArray の要素検索を別の vector field と組み合わせる。1 つの AnnSearchRequest で StructArray の vector subfield を対象にした hybrid search を使用する。要素レベルのサブ検索、エンティティレベルの reranking。StructArray を使用した Hybrid Search

2 つの検索モデルを理解する

EmbeddingList search は、StructArray の vector subfield 内の vectors を、親エンティティに対する 1 つの embedding list として扱います。クエリも embedding list です。Zilliz Cloud は、MAX_SIM* metric を使用してクエリ embedding list と保存された embedding list を比較し、一致するエンティティを返します。

  • クエリデータ: embedding list。

  • metric ファミリー: MAX_SIM*

  • 結果の粒度: エンティティレベル。

  • 最適な用途: ドキュメントレベルまたはページレベルの late-interaction retrieval。

Element-level search は、各 Struct 要素を独立した vector-search 候補として扱います。各ヒットは StructArray フィールド内の一致した要素を表し、grouping されていない結果では要素オフセットを公開できます。

  • クエリデータ: 通常の vector。

  • metric ファミリー: 通常の vector metrics。

  • 結果の粒度: Struct 要素レベル。

  • 最適な用途: chunk レベル、clip レベル、または patch レベルの検索。

🚧警告

collection で EmbeddingList search と element-level search の両方が必要な場合は、2 つの別々の vector subfield を使用してください。vector field または vector subfield は 1 つの index しか受け付けられず、2 つの検索モードでは異なる metric ファミリーが必要です。

ドキュメントマップ

StructArray のドキュメントは、モデリングページと検索ページに分かれています。モデリングページはデータの定義と準備に使用します。検索ページは、適切な retrieval と filtering の動作を選ぶために使用します。

AreaPage用途
ModelingStructArray フィールドの作成Struct schema を定義し、StructArray フィールドを追加する。
ModelingStructArray フィールドへのデータ挿入ネストされた StructArray データを準備して挿入する。
ModelingStructArray フィールドのインデックス作成StructArray の subfield に vector index と scalar index を作成する。
ReferenceStructArray の制限schema、data type、index、search、filter、および version の制限を確認する。
SearchStructArray を使用した基本的な Vector SearchEmbeddingList search と element-level vector search を比較する。
SearchStructArray を使用した Range SearchStructArray の vector subfield に range 制約を使用する。
SearchStructArray を使用した Grouping Searchelement-level search の結果を主キーでグループ化する。
SearchStructArray を使用した Hybrid SearchStructArray の element-level search を他の vector search と組み合わせる。
SearchStructArray を使用した Filtered Searchsearch、query、hybrid search で StructArray filters を使用する。
SearchEmbedding List による検索StructArray を使用して ColBERT および ColPali スタイルの retrieval system を構築する。
FilterStructArray Operatorselement_filterMATCH_* operators のリファレンス構文。

最初に確認すべき主な制限

  • Struct は Array field の要素型として使用できます。トップレベルの collection field としては使用しません。

  • 同じ StructArray フィールド内のすべての Struct 要素は、1 つの事前定義された schema を共有します。

  • vector subfield には index が必要です。EmbeddingList search は MAX_SIM* metrics を使用し、element-level search は通常の vector metrics を使用します。

  • element_filterMATCH_* は StructArray フィールド内の scalar subfield 用です。$[subfield] はこれらの operators の内部でのみ使用してください。

  • 一部の検索の組み合わせは version による制約またはモード固有の制約があります。range search、grouping search、hybrid search、nullable fields、または動的に追加される fields に依存する前に、StructArray の制限 を確認してください。

次のステップ

  1. schema を設計するには、StructArray フィールドの作成 を参照してください。

  2. データを準備するには、StructArray フィールドへのデータ挿入 を参照してください。

  3. indexes を選択するには、StructArray フィールドのインデックス作成 を参照してください。

  4. StructArray の vector subfield を検索するには、まず StructArray を使用した基本的な Vector Search を参照してください。

  5. StructArray の scalar subfield をフィルタリングするには、StructArray Operators および StructArray を使用した Filtered Search を参照してください。

Ctrl I