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

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

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

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

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

curl -X POST \
'https://vectorsearch.googleapis.com/v1beta/projects/PROJECT_ID/locations/LOCATION/collections/movies/dataObjects:search' \
  -H 'Bearer $(gcloud auth print-access-token)' \
  -H 'Content-Type: application/json' \
  -d '{ \
    "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": "*" \
      } \
    } \
  }'

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

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

  • ": フレーズ検索用の二重引用符。

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

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

batch_search_data_objects を使用して、複数の検索(ベクトル検索、テキスト検索、セマンティック検索)を並行して実行し、必要に応じて Ranker を使用して結果を結合してランク付けします。

次のランキング機能を使用できます。

  • ReciprocalRankFusion: Reciprocal Rank Fusion(RFF)アルゴリズムを使用して結果セットをマージします。

  • VertexRanker: Vertex Ranking API を使用して結果を統合し、ランク付けします。