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

OpenSearch:ベクトルとテキストに基づくハイブリッドクエリ

最終更新日:Mar 27, 2025

クエリ構文

URL

curl -X POST /search or curl -X POST /vector-service/search

  • サンプル URL では、リクエストヘッダーのパラメーターやエンコーディングメソッドなどの情報は省略されています。

  • サンプル URL では、OpenSearch インスタンスへの接続に使用するエンドポイントも省略されています。

  • 上記の URL に連結されているすべてのリクエストパラメーターの定義、使用方法、および値の例については、このトピックの「リクエストパラメーター」セクションをご参照ください。

プロトコル

HTTP

リクエストメソッド

POST

サポートされているフォーマット

JSON

署名メソッド

次のメソッドを使用して、リクエスト署名を計算できます。リクエスト署名は、認証ヘッダーに格納されます。

パラメーター

説明

accessUserName

文字列

ユーザー名。ユーザー名は、[インスタンスの詳細] ページの [API エンドポイント] セクションで確認できます。

accessPassWord

文字列

パスワード。[インスタンスの詳細] ページの [API エンドポイント] セクションでパスワードを変更できます。

import com.aliyun.darabonba.encode.Encoder;
import com.aliyun.darabonbastring.Client;

public class GenerateAuthorization {

    public static void main(String[] args) throws Exception {
        String accessUserName = "username"; // ユーザー名
        String accessPassWord = "password"; // パスワード
        String realmStr = "" + accessUserName + ":" + accessPassWord + "";
        String authorization = Encoder.base64EncodeToString(Client.toBytes(realmStr, "UTF-8"));
        System.out.println(authorization);
    }
}

認証ヘッダーの値の有効な形式:

cm9vdDp******mdhbA==

HTTP リクエストで認証ヘッダーを指定する場合は、Basic プレフィックスを追加する必要があります。

例:

authorization: Basic cm9vdDp******mdhbA==

リクエストパラメーター

パラメーター

必須

デフォルト値

説明

tableName

文字列

はい

デフォルト値なし

クエリ対象のテーブルの名前。

knn

オブジェクト

いいえ

デフォルト値なし

k 近傍法 (kNN) クエリパラメーター。

knn.vector

リスト [float]

はい

デフォルト値なし

クエリ対象の密ベクトルデータ。

knn.topk

int

いいえ

デフォルト値なし

返される結果の数。

knn.filter

String

いいえ

""

フィルター条件の式。

knn.weight

Float

いいえ

1.0

kNN クエリ結果の重み。スコアに重みを掛けた結果がソートスコアとして使用されます。

text

オブジェクト

いいえ

デフォルト値なし

テキストクエリパラメーター。

text.queryString

String

はい

デフォルト値なし

HA3 でサポートされているクエリ句の構文。複数のテキストインデックスで AND 演算子と OR 演算子を使用してネストされた条件をサポートします。

text.queryParams

Map<String, String>

いいえ

{}

データクエリの パラメーター:

  • default_op: システムがデフォルトのアナライザを使用して検索クエリをトークン化した後に返される用語間の論理関係を指定します。有効な値: AND および OR。デフォルト値: AND。

  • no_token_indexes: システムで用語に変換したくないフィールドを指定します。このパラメーターの構成は、正規化やストップワードの削除など、指定されたフィールドの値に対して実行される他の操作には影響しません。複数のフィールドはセミコロン (;) で区切ります。

  • remove_stopwords: アナライザを構成するときにストップワードを削除するかどうかを指定します。有効な値: true および false。デフォルト値: true

text.filter

String

いいえ

""

フィルター条件の式。

text.weight

Float

いいえ

1.0

テキストクエリ結果の重み。スコアに重みを掛けた結果がソートスコアとして使用されます。

text.terminateAfter

Integer

いいえ

0

各シャードでクエリ条件を満たすドキュメントの最大数。指定された値に達すると、クエリは終了します。デフォルト値は 0 です。値に制限はありません。

size

Integer

いいえ

100

返される結果の数。

from

Integer

いいえ

0

結果セット内でドキュメントの返却を開始する値。

outputFields

List[String]

いいえ

[]

結果に返すフィールド。

order

String

いいえ

DESC

結果をソートする順序。

  • DESC: 降順

  • ASC: 昇順

rank

オブジェクト

いいえ

{}

2 つの結果セットをマージするために使用されるポリシー。サポートされているポリシー:

  • デフォルトポリシー: 2 つの結果セットでプライマリキーが同じドキュメントのスコアは、重みに基づいて結合されます。結果は、加重スコアに基づいてソートされます。

  • rrf: 2 つの結果セットは、逆順位融合 (RRF) アルゴリズムに基づいてマージされます。

使用上の注意

  • kNN は単一ベクトルクエリのみをサポートし、クエリパラメーターは API クエリのパラメーターと同じです。

  • ベクトルスコアは変換する必要があります。

    kNN スコアとテキストスコアを組み合わせるには、kNN ベクトルスコアを変換する必要があります。

    # ユークリッド距離
    score = 1.0 / (1.0 + l2_distance^2)
    
    # 内積距離
    score = (1.0 + ip_distance) / 2.0
  • kNN クエリの order パラメーターは有効になりません。外側のレイヤーの order パラメーターが使用されます。

  • デフォルトのソート順

    • 構成方法: rank パラメーターを構成しないか、rank パラメーターを空のままにします。

      {
        "rank": {}
      }
    • 2 つの結果セットでプライマリキーが同じドキュメントのスコアを重みに基づいて結合します。加重スコアに基づいて結果をソートします。

      score(i) = knn_score(i) * knn_weight + text_score(i) * text_weight

  • RRF

    • 構成方法:

      {
        "rank": {
          "rrf": {
            "rankConstant": 60
          }
        }
      }
      
      # rankConstant はオプションです。デフォルト値: 60。
    • score = 0.0
      if d in result(q):
          score += 1.0 / (rankConstant + rank(result(q), d))
      return score
      
      # rankConstant は、結果セット内のドキュメントのランキングが最終スコアに影響を与える程度を決定するソート定数です。値が大きいほど、ランクの低いドキュメントが最終スコアに与える影響が大きくなります。このパラメーターの値は、1 以上の整数である必要があります。デフォルト値: 60。
      # rank(result(q), d) は、結果セット内のドキュメントの位置を示し、1 から始まります。

クエリ例

{
    "tableName": "test",
    "text": {
        "queryString": "title:'Alibaba'",
        "queryParams": {
            "default_op": "OR"
        },
        "filter": "count > 0",
        "terminateAfter": 100000
    },
    "knn": {
        "vector": [0.1, 0.2, 0.3, 0.4, 0.5],
        "namespace": "1",
        "topK": 100
    },
    "order": "DESC",
    "size": 10,
    "rank": {
        "rrf": {
            "rankConstant": 1
        }
    },
    "outputFields": ["title"]
}

返された結果

{
  "totalTime": 8.522,
  "coveredPercent": 1.0,
  "totalCount": 5,
  "result": [
    {
      "__source__": 2,
      "score": 0.833333,
      "namespace": 1,
      "id": 2,
      "fields": {
        "title": "a b c"
      }
    },
    {
      "__source__": 3,
      "score": 0.666666,
      "namespace": 1,
      "id": 1,
      "fields": {
        "title": "a b"
      }
    },
    {
      "__source__": 3,
      "score": 0.333333,
      "namespace": 2,
      "id": 5,
      "fields": {
        "title": "c"
      }
    },
    {
      "__source__": 2,
      "score": 0.25,
      "namespace": 2,
      "id": 4,
      "fields": {
        "title": "b c"
      }
    },
    {
      "__source__": 2,
      "score": 0.2,
      "namespace": 1,
      "id": 0,
      "fields": {
        "title": "a"
      }
    }
  ]
}

結果パラメーター:

フィールド

説明

id

スキーマで構成されたデータ型。

プライマリキーの値。

namespace

スキーマで構成されたデータ型。

kNN によってクエリされるベクトルインデックスの名前空間。このフィールドは、名前空間が構成されている場合にのみ使用できます。

vector

List[Float]

kNN によってクエリされるベクトルインデックスの値。 kNN クエリに "includeVector": true 構成を追加する必要があります。

score

Float

ソートのスコア。

fields

Map<String, FieldType>

返されたフィールド。キーと値のペアの形式です。

totalTime

Integer

応答時間。単位: ミリ秒。

totalCount

Integer

返された結果の数。

__source__

Integer

データの取得元のクエリのタイプ。有効な値:

1: kNN クエリ。

2: テキストクエリ。

3: kNN クエリとテキストクエリ。

coveredPercent

Float

データの返却に成功したシャードの割合。たとえば、値 1.0 は、すべてのシャードがデータの返却に成功したことを示します。