データ オブジェクトの検索

Search API の目的は、指定されたクエリに類似するデータ オブジェクトを見つけ、ランク付けされた結果のリスト(類似性でランク付け)を返すことです。Search API はフィルタリングもサポートしています。

Search API には、ベクトル検索、全文検索、セマンティック検索など、データ オブジェクトを検索するさまざまな方法が用意されています。また、任意のタイプの検索をいくつか組み合わせてハイブリッド検索を実現することもできます。

ベクトル検索を使用すると、独自のクエリベクトルを指定できます。これは、embedding-config のないエンベディング フィールドを検索するために必要なメソッドです。複数の vector_search フィールドが指定されている場合、結果は同じ重みで結合されます。

次の例は、ID が COLLECTION_ID のコレクションでベクトル検索を実行する方法を示しています。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • COLLECTION_ID: コレクションの ID。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Cloud de Confiance by S3NS プロジェクト ID。

HTTP メソッドと URL:

POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search

リクエストの本文(JSON):

{
  "vector_search": {
    "search_field": "plot_embedding",
    "vector": {
      "values": [
        0.42426406871192845,
        0.565685424949238,
        0.7071067811865475
      ]
    },
    "filter": {
      "genre": {
        "$eq": "Thriller"
      }
    },
    "top_k": 5,
    "output_fields": {
      "data_fields": "*",
      "vector_fields": "*",
      "metadata_fields": "*"
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "results": [
    {
      "dataObject": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1",
        "createTime": "2026-01-31T20:05:06Z",
        "updateTime": "2026-02-02T13:59:24Z",
        "data": {
          "year": 1991,
          "title": "The Silence of the Lambs",
          "director": "Jonathan Demme",
          "genre": "Thriller"
        },
        "vectors": {
          "plot_embedding": {
            "dense": {
              "values": [
                1,
                1,
                1
              ]
            }
          },
          "sparse_embedding": {
            "sparse": {
              "values": [
                1,
                6,
                3,
                2,
                8,
                5,
                2
              ],
              "indices": [
                4065,
                13326,
                17377,
                25918,
                28105,
                32683,
                42998
              ]
            }
          },
          "genre_embedding": {
            "dense": {
              "values": [
                0.3863801,
                0.73934346,
                0.16189057,
                0.5271367
              ]
            }
          },
          "soundtrack_embedding": {
            "dense": {
              "values": [
                0.5920452,
                0.08301644,
                0.12647335,
                0.619643,
                0.49258286
              ]
            }
          }
        }
      },
      "distance": 1.697
    },
    {
      "dataObject": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2",
        "createTime": "2026-02-04T14:35:29Z",
        "updateTime": "2026-02-04T14:37:29Z",
        "data": {
          "year": 1995,
          "title": "Se7en",
          "director": "David Fincher",
          "genre": "Thriller"
        },
        "vectors": {
          "genre_embedding": {
            "dense": {
              "values": [
                0.3863801,
                0.73934346,
                0.16189057,
                0.5271367
              ]
            }
          },
          "plot_embedding": {
            "dense": {
              "values": [
                1,
                1,
                1
              ]
            }
          },
          "sparse_embedding": {
            "sparse": {
              "values": [
                1,
                6,
                3,
                2,
                8,
                5,
                2
              ],
              "indices": [
                4065,
                13326,
                17377,
                25918,
                28105,
                32683,
                42998
              ]
            }
          },
          "soundtrack_embedding": {
            "dense": {
              "values": [
                0.5920452,
                0.08301644,
                0.12647335,
                0.619643,
                0.49258286
              ]
            }
          }
        }
      },
      "distance": 1.75
    }
  ]
}

gcloud

後述のコマンドデータを使用する前に、次のように置き換えます。

  • SEARCH_VECTOR_FILE: 検索に使用する密ベクトルまたはスパース ベクトルを含む JSON ファイルのローカルパス。

    密ベクトル ファイルの内容の例:

    {
      "dense": {
        "values": [
          0.42426406871192845,
          0.565685424949238,
          0.7071067811865475
        ]
      }
    }

    スパース ベクトルのファイル内容の例:

    {
      "sparse": {
        "indices": [1, 5, 10],
        "values": [0.1, 0.5, 0.21]
      }
    }
  • COLLECTION_ID: コレクションの ID。
  • LOCATION: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 実際の Cloud de Confiance by S3NS プロジェクト ID。

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud vector-search collections data-objects search \
  --vector-search-field="plot_embedding" \
  --vector-from-file=SEARCH_VECTOR_FILE \
  --json-filter='{"genre": {"$eq": "Thriller"}}' \
  --top-k=5 \
  --output-data-fields='*' \
  --output-vector-fields='*' \
  --output-metadata-fields='*' \
  --collection=COLLECTION_ID \
  --location=LOCATION \
  --project=PROJECT_ID

Windows(PowerShell)

gcloud vector-search collections data-objects search `
  --vector-search-field="plot_embedding" `
  --vector-from-file=SEARCH_VECTOR_FILE `
  --json-filter='{"genre": {"$eq": "Thriller"}}' `
  --top-k=5 `
  --output-data-fields='*' `
  --output-vector-fields='*' `
  --output-metadata-fields='*' `
  --collection=COLLECTION_ID `
  --location=LOCATION `
  --project=PROJECT_ID

Windows(cmd.exe)

gcloud vector-search collections data-objects search ^
  --vector-search-field="plot_embedding" ^
  --vector-from-file=SEARCH_VECTOR_FILE ^
  --json-filter='{"genre": {"$eq": "Thriller"}}' ^
  --top-k=5 ^
  --output-data-fields='*' ^
  --output-vector-fields='*' ^
  --output-metadata-fields='*' ^
  --collection=COLLECTION_ID ^
  --location=LOCATION ^
  --project=PROJECT_ID

次のようなレスポンスが返されます。

---
dataObject:
  createTime: '2026-01-31T20:05:06Z'
  data:
    director: Jonathan Demme
    genre: Thriller
    title: The Silence of the Lambs
    year: 1991
  name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1
  updateTime: '2026-02-02T13:59:24Z'
  vectors:
    genre_embedding:
      dense:
        values:
        - 0.38638
        - 0.739343
        - 0.161891
        - 0.527137
    plot_embedding:
      dense:
        values:
        - 1.0
        - 1.0
        - 1.0
    soundtrack_embedding:
      dense:
        values:
        - 0.592045
        - 0.0830164
        - 0.126473
        - 0.619643
        - 0.492583
    sparse_embedding:
      sparse:
        indices:
        - 4065
        - 13326
        - 17377
        - 25918
        - 28105
        - 32683
        - 42998
        values:
        - 1.0
        - 6.0
        - 3.0
        - 2.0
        - 8.0
        - 5.0
        - 2.0
distance: 1.697
---
dataObject:
  createTime: '2026-02-04T14:35:29Z'
  data:
    director: David Fincher
    genre: Thriller
    title: Se7en
    year: 1995
  name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2
  updateTime: '2026-02-04T14:37:29Z'
  vectors:
    genre_embedding:
      dense:
        values:
        - 0.38638
        - 0.739343
        - 0.161891
        - 0.527137
    plot_embedding:
      dense:
        values:
        - 1.0
        - 1.0
        - 1.0
    soundtrack_embedding:
      dense:
        values:
        - 0.592045
        - 0.0830164
        - 0.126473
        - 0.619643
        - 0.492583
    sparse_embedding:
      sparse:
        indices:
        - 4065
        - 13326
        - 17377
        - 25918
        - 28105
        - 32683
        - 42998
        values:
        - 1.0
        - 6.0
        - 3.0
        - 2.0
        - 8.0
        - 5.0
        - 2.0
distance: 1.75

Python

from google.cloud import vectorsearch_v1

# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()

# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
    search_field="plot_embedding",
    vector={"values": [0.1, 0.2, 0.3]},
    filter={"genre": {"$eq": "Thriller"}},
    top_k=5,
)
request = vectorsearch_v1.SearchDataObjectsRequest(
    parent="projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID",
    vector_search=vector_search,
)

# Make the request
response = data_object_search_service_client.search_data_objects(request=request)

# Handle the response
print(response)

検索の精度とパフォーマンスを調整する

10 万を超えるエンベディングを含む高密度 ANN インデックスのベクトル検索の場合、Agent Retrieval はデフォルトで、再現率とレイテンシの最適なトレードオフを提供しようとします。目標再現率を指定することで、ユースケースに合わせてこのバランスを調整できます。

値は 0.00 以上かつ 1.00 以下でなければなりません。

ANN インデックスの作成方法については、ANN インデックスの作成をご覧ください。

次の例は、目標再現率が 0.95 の高密度 ANN インデックスでベクトル検索を実行する方法を示しています。

REST

HTTP メソッドと URL:

POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search

リクエストの本文(JSON):

{
  "vectorSearch": {
    "searchField": "plot_embedding",
    "vector": {
      "values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
    },
    "topK": 10,
    "searchHint": {
      "indexHint": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/indexes/INDEX_ID",
        "denseScannParams": {
          "targetRecall": 0.95
        }
      }
    },
    "outputFields": {
      "dataFields": "*",
      "vectorFields": "*",
      "metadataFields": "*"
    }
  }
}

gcloud

クエリ ベクトルを JSON ファイル(vector.json など)に保存します。

{
  "dense": {
    "values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
  }
}

次に、gcloud vector-search collections data-objects search コマンドを実行します。

gcloud vector-search collections data-objects search \
    --project=PROJECT_ID \
    --location=LOCATION \
    --collection=COLLECTION_ID \
    --vector-search-field=plot_embedding \
    --vector-from-file=vector.json \
    --use-index=INDEX_ID \
    --dense-scann-target-recall=0.95 \
    --top-k=10

Python

from google.cloud import vectorsearch_v1

# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()

collection = "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID"

# Set the target recall rate on the index hint
search_hint = vectorsearch_v1.SearchHint(
    index_hint=vectorsearch_v1.SearchHint.IndexHint(
        name=f"{collection}/indexes/INDEX_ID",
        dense_scann_params=vectorsearch_v1.SearchHint.IndexHint.DenseScannParams(
            target_recall=0.95,
        ),
    ),
)

# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
    search_field="plot_embedding",
    vector={"values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]},
    top_k=10,
    search_hint=search_hint,
    output_fields=vectorsearch_v1.OutputFields(
        data_fields=["*"],
        vector_fields=["*"],
        metadata_fields=["*"],
    ),
)
request = vectorsearch_v1.SearchDataObjectsRequest(
    parent=collection,
    vector_search=vector_search,
)

# Make the request
response = data_object_search_service_client.search_data_objects(request=request)

# Handle the response
print(response)

これにより、スパース ベクトルを使用せずに全文検索が実行されます。デフォルトの「word」クエリ言語では、入力全体が暗黙的な AND 演算子を含む個々の検索語句として扱われます。enhanced_query を true に設定すると、検索キーワードの拡張、ステミングの処理、ストップワードの削除、追加の検索演算子の使用が可能になります。

  • OR: 指定された語句を 1 つ以上含むドキュメントを照合する、大文字と小文字を区別する論理和演算子。これは、隣接する 2 つの語句にのみ適用されます。

  • ": (二重引用符)によるフレーズ検索。

  • -: 否定演算子。この演算子の前に置かれた語句を含むドキュメントは除外されます。

Agent Retrieval テキスト検索 API を使用すると、1 つ以上のサブクエリを含む構造化クエリでテキスト検索を表現できます。これにより、次のことが可能になります。

  • 特定のデータ オブジェクトのフィールドと照合します。

  • 実行する照合のタイプを指定します。

    • キーワードあたり、大文字と小文字を区別しない

    • 完全一致(大文字と小文字を区別)

  • 言語ごとの拡張機能を含めて、キーワードの語幹、同義語、スペルミス、ストップワード(「a」、「an」、「the」など)を照合します。

  • AND、OR、NOT のブール演算子を使用して、サブクエリを結合します。

  • サブクエリをグループ化して、評価順序を制御します。

  • ブースト スコアの貢献度を調整してランキングに影響を与えます。

サブクエリには次の 3 種類があります。

  • テキスト: 検索テキストと、照合する 1 つ以上のフィールドを指定します。

  • 単項: 単一のサブクエリに NOT 演算を適用します。

  • 結合: AND 演算子または OR 演算子を適用してサブクエリを結合します。他の結合サブクエリをグループ化して評価順序を制御するために使用できます。

このページの例では、次の表に示す Collection を使用します。これには 6 つのデータ オブジェクトが含まれており、データスキーマで文字列 ID、Title、Description、文字列配列 Keywords の各フィールドが定義されています。

ID タイトル 説明 キーワード
1 The Quick Brown Fox 素早い茶色の狐は怠け者の犬を簡単に飛び越える。 野生、森、哺乳類、オレンジ、敏捷性、捕食者
2 Lazy Dog Days 茶色の犬が眠っています。 国内、ペット、家、犬、穏やか、怠惰、従順
3 Fox vs Dog 素早い狐は犬を出し抜きます。 野生、家畜、紛争、イヌ亜目、哺乳類、交流
4 ヒグマ 森の中を素早く移動します。 野生、森、クマ、頂点捕食者、休止状態、巨大
5 キツネの物語 犬が高くジャンプします。 狡猾、ジャンプ
6 My Lazy Days of Summer 夏休みにリラックスする短編小説。 夏, リラックス, 休暇, 太陽

テキスト サブクエリ

テキスト クエリは、データ オブジェクト内の 1 つ以上のフィールドと照合されます。すべての構造化クエリには、少なくとも 1 つのテキスト クエリが含まれている必要があります。

次の例では、基本的なテキスト クエリを定義しています。

"text_search": {
  "structured_query": {
    "text": {
      "text": "fox vs dog"
    }
  }
}

デフォルトでは、テキストは個々の語句に分割され、指定されたフィールドで各語句が検索されます。上記の例では、Title フィールドで「fox」、「vs」、「dog」という用語が検索されます。

テキスト クエリには、次のオプション パラメータがあります。

  • fields: 照合するフィールドの配列。指定しない場合、デフォルトではすべてのフィールドが照合されます。フィールドは暗黙的な OR 演算子と照合されます。

  • match_type: 実行する照合のタイプ。マッチタイプは EXACT にできます。これは、フィールドが検索テキストと完全に一致する必要があることを指定します。フィールドが文字列配列の場合、配列内の任意の要素に対して照合が実行されます。

  • enhancement: enabled と languageCode を指定します。これにより、languageCode で指定された言語(en-US など)の同義語、語幹、スペルミス、ストップワードに対して一致を実行できます。デフォルトでは、拡張機能は使用されません。

  • boost: 省略可。クエリのスコアに適用する乗数。デフォルトは 1.0 です。

一致タイプ

match_type パラメータは、検索テキストがフィールドの値とどのように一致するかを指定します。

パラメータの値は次のいずれかです。

  • EXACT: フィールドはクエリ用語と完全に一致している必要があります。フィールドが文字列配列の場合、配列内の任意の要素に対して照合が実行されます。

次の例では、EXACT のマッチタイプを指定しています。

"text_search": {
  "structured_query": {
    "text": {
      "text": "Fox vs Dog",
      "fields": [ "Title" ],
      "match_type": "EXACT"
    }
  }
}

文字列配列のマッチタイプ

クエリの結果は次の表のとおりです。

スコア ID タイトル 説明 キーワード
1.0000 3 Fox vs Dog 素早い狐は犬を出し抜きます。 野生、家畜、紛争、イヌ亜目、哺乳類、交流

フィールドが文字列配列の場合、検索テキストは配列要素のいずれかと照合されます。

次の例は、Keywords 文字列配列でテキスト wild を検索する方法を示しています。

"text_search": {
  "structured_query": {
    "text": {
      "text": "wild",
      "fields": [ "Keywords" ],
      "match_type": "EXACT"
    }
  }
}

クエリの結果は次の表のとおりです。

スコア ID タイトル 説明 キーワード
1.0000 3 Fox vs Dog 素早い狐は犬を出し抜きます。 野生、家畜、紛争、イヌ亜目、哺乳類、交流
1.0000 4 ヒグマ 森の中を素早く移動します。 野生、森、クマ、頂点捕食者、休止状態、巨大
1.0000 1 The Quick Brown Fox 素早い茶色の狐は怠け者の犬を簡単に飛び越える。 野生、森、哺乳類、オレンジ、敏捷性、捕食者

クエリの拡張

検索クエリには、言語固有の機能強化を指定するオプションの queryEnhancement パラメータを含めることができます。これには、同義語、語幹(「jump」の語幹「jumping」など)、スペルミス、ストップワード(「a」、「an」、「the」など)との照合が含まれます。

パラメータは、次のプロパティを持つオブジェクトです。

  • enabled: 拡張機能を有効にするかどうかを指定するブール値。

  • languageCode: 拡張機能の言語を指定する文字列(en-US など)。

次の例では、en-US 言語の拡張機能を有効にします。

"text_search": {
  "structured_query": {
    "text": {
      "text": {
        "text": "jump",
        "fields": [ "Description" ],
        "queryEnhancement": {
          "enabled": true,
          "languageCode": "en-US"
        }
      }
    }
  }
}

クエリの結果は次の表のとおりです。

スコア ID タイトル 説明 キーワード
0.3419 1 The Quick Brown Fox 素早い茶色の狐は怠け者の犬を簡単に飛び越える。 野生、森、哺乳類、オレンジ、敏捷性、捕食者
0.3419 5 キツネの物語 犬が高くジャンプします。 狡猾、ジャンプ

queryEnhancement が指定されていない場合、または enabled が false の場合、一致は行われません。

結合サブクエリ

結合クエリは、2 つ以上のサブクエリにブール演算を適用します。サポートされているオペレーションは AND と OR です。

結合されたクエリには次のプロパティがあります。

  • op: サブクエリに適用するブール演算子。値は AND または OR です。

  • subQueries: 結合するサブクエリの配列。これらは、他の結合クエリを含む、サポートされているサブクエリ タイプのいずれかになります。ネストの最大深度は 2 です。

    • boost: 省略可。クエリのスコアに適用する乗数。デフォルトは 1.0 です。

論理積(AND)

AND 演算子は、すべてのサブクエリの用語を含むデータ オブジェクトを照合します。

次の例は、AND 演算子を使用して 3 つのテキスト クエリを結合する方法を示しています。

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

この例では、3 つのサブクエリすべてが一致した場合にのみ一致が検出されます。

クエリの結果は次の表のとおりです。

スコア ID タイトル 説明 キーワード
5.0587 4 ヒグマ 森の中を素早く移動します。 野生、森、クマ、頂点捕食者、休止状態、巨大
5.0587 1 The Quick Brown Fox 素早い茶色の狐は怠け者の犬を簡単に飛び越える。 野生、森、哺乳類、オレンジ、敏捷性、捕食者

次の例に示すように、テキスト サブクエリに複数の照合フィールドがある場合は、暗黙的な OR が適用されます。

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title", "Description" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

上の例の各要素の内容は次のとおりです。

  • 最初のサブクエリは、Title フィールドまたは Description フィールドのいずれかで、大文字と小文字を区別しない用語 Brown に一致します。

  • 2 番目のサブクエリは、Description フィールドで大文字と小文字を区別しない用語 quick を照合します。

  • 3 番目のサブクエリは、Keywords 文字列配列フィールドのいずれかの値で、大文字と小文字を区別しない用語 forest と predator を照合します。

  • 3 つのサブクエリすべてが一致すると、結合されたクエリで一致が成立します。

クエリの結果は次の表のとおりです。

スコア ID タイトル 説明 キーワード
6.3176 1 The Quick Brown Fox 素早い茶色の狐は怠け者の犬を簡単に飛び越える。 野生、森、哺乳類、オレンジ、敏捷性、捕食者
5.0587 4 ヒグマ 森の中を素早く移動します。 野生、森、クマ、頂点捕食者、休止状態、巨大

論理和(OR)

OR 演算子は、少なくとも 1 つのサブクエリの用語を含むデータ オブジェクトを照合します。

次の例は、OR 演算子を使用して 3 つのテキスト クエリを結合する方法を示しています。

"text_search": {
  "structured_query": {
    "combine": {
      "op": "OR",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title", "Description" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

この例では、3 つのサブクエリのいずれかが一致すると、一致と見なされます。

クエリの結果は次の表のとおりです。

スコア ID タイトル 説明 キーワード
6.3176 1 The Quick Brown Fox 素早い茶色の狐は怠け者の犬を簡単に飛び越える。 野生、森、哺乳類、オレンジ、敏捷性、捕食者
5.0587 4 ヒグマ 森の中を素早く移動します。 野生、森、クマ、頂点捕食者、休止状態、巨大

グループ化

結合されたサブクエリは、評価順序を制御するために、他の結合されたサブクエリ内にネストできます。

次の例は、サブクエリをグループ化する方法を示しています。

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "combine": {
            "op": "OR",
            "subQueries": [
              {
                "text": {
                  "text": "Fox",
                  "fields": [ "Title" ]
                }
              },
              {
                "text": {
                  "text": "jumps",
                  "fields": [ "Description" ]
                }
              }
            ]
          }
        },
        {
          "unary": {
            "op": "NOT",
            "subQuery": {
              "text": {
                "text": "domestic",
                "fields": [ "Keywords" ]
              }
            }
          }
        }
      ]
    }
  }
}

上記の例は、次の式と同じです。(Title の大文字と小文字を区別しない Fox または Description の大文字と小文字を区別しない jumps)かつ Keywords 要素のいずれかの大文字と小文字を区別しない domestic。

次の表に、クエリの結果を示します。

スコア ID タイトル 説明 キーワード
3.5178 1 The Quick Brown Fox 素早い茶色の狐は怠け者の犬を簡単に飛び越える。 野生、森、哺乳類、オレンジ、敏捷性、捕食者
2.2589 5 キツネの物語 犬が高くジャンプします。 狡猾、ジャンプ

単項サブクエリ

単項サブクエリは、構造化クエリ内の単一のサブクエリにブール演算を適用します。サポートされている単項演算子は NOT 演算子のみです。

単項クエリには次のプロパティがあります。

  • op: サブクエリに適用するブール演算子。値は NOT にできます。

  • subQuery: 単項演算を適用するサブクエリ。

    • boost: 省略可。クエリのスコアに適用する乗数。デフォルトは 1.0 です。

否定(NOT)

NOT 演算子は、サブクエリの用語を含まないデータ オブジェクトを照合します。

次の例は、NOT 演算子の使用方法を示しています。

"text_search": {
  "structured_query": {
    "unary": {
      "op": "NOT",
      "subQuery": {
        "text": {
          "text": "dog",
          "fields": [ "Description" ]
        }
      }
    }
  }
}

クエリの結果は次の表のとおりです。

スコア ID タイトル 説明 キーワード
1.000 4 ヒグマ 森の中を素早く移動します。 野生、森、クマ、頂点捕食者、休止状態、巨大
1.000 6 My Lazy Days of Summer 夏休みにリラックスする短編小説。 夏, リラックス, 休暇, 太陽

文字列配列に適用すると、NOT 演算子は、用語が配列の要素に含まれていない場合にデータ オブジェクトを照合します。

この例では、大文字と小文字を区別しない用語 orange が Keywords 文字列配列のどの要素にも含まれていない場合に一致します。

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        },
        {
          "unary": {
            "op": "NOT",
            "subQuery": {
              "text": {
                "text": "orange",
                "fields": [ "Keywords" ]
              }
            }
          }
        }
      ]
    }
  }
}

クエリの結果は次の表のとおりです。

スコア ID タイトル 説明 キーワード
6.0587 4 ヒグマ 森の中を素早く移動します。 野生、森、クマ、頂点捕食者、休止状態、巨大

ブースティング

任意のサブクエリに boost パラメータを設定して、サブクエリのスコアに乗数を適用できます。デフォルトでは、すべてのサブクエリの boost は 1.0 です。

次の例は、サブクエリをブーストする方法を示しています。

"text_search": {
  "structured_query": {
    "combine": {
      "op": "OR",
      "subQueries": [
        {
          "text": {
            "text": "fox",
            "fields": [ "Title" ]
          },
          "boost": 1.0
        },
        {
          "text": {
            "text": "jumps",
            "fields": [ "Description" ]
          },
          "boost": 1.0
        },
        {
          "text": {
            "text": "interaction",
            "fields": [ "Keywords" ]
          },
          "boost": 5.0
        }
      ]
    }
  }
}

クエリの結果は次の表のとおりです。

スコア ID タイトル 説明 キーワード
7.5534 3 Fox vs Dog 素早い狐は犬を出し抜きます。 野生、家畜、紛争、イヌ亜目、哺乳類、交流
2.5178 1 The Quick Brown Fox 素早い茶色の狐は怠け者の犬を簡単に飛び越える。 野生、森、哺乳類、オレンジ、敏捷性、捕食者
1.2589 5 キツネの物語 犬が高くジャンプします。 狡猾、ジャンプ

この検索では、テキストクエリがエンベディングに変換され、セマンティックな意味に基づいて結果が検索されます。スキーマで定義された embedding-config を使用して、クエリ エンベディングを生成します。複数の vector_search フィールドが指定されている場合、結果は同じ重みで結合されます。

batch_search_data_objects を使用して、複数の検索(ベクトル検索、テキスト検索、セマンティック検索)を並行して実行します。結果は、必要に応じて ReciprocalRankFusion ランカーを使用して結合し、ランク付けできます。このランカーは、Reciprocal Rank Fusion(RFF)アルゴリズムを使用して結果セットを統合します。