全部產品
Search
文件中心

OpenSearch:稀疏向量查詢

更新時間:Mar 25, 2025

URL

/vector-service/query

  • 以上 URL 省略了請求Header參數及編碼等因素。

  • 以上 URL 中省略了訪問應用的 host 地址。

  • 以上URL 中拼接的所有查詢參數,請查看下方“查詢參數”的參數定義、使用方式及範例。

請求協議

HTTP

請求方式

POST

支援格式

JSON

簽名機制

可用以下方法計算簽名(authorization

參數

類型

描述

accessUserName

string

使用者名稱,可在執行個體詳情頁>網路資訊查看

accessPassWord

string

密碼,可在執行個體詳情頁>網路資訊修改

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);
    }
}

authorization正確返回格式:

cm9vdDp******mdhbA==

使用HTTP請求設定authorization參數時需加上Basic首碼

樣本:(加在header中)

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

請求body文法

  • SearchRequest

參數名稱

描述

預設值

類型

是否必須

tableName

查詢的表名

string

indexName

稠密向量索引名稱

string

vector

查詢的稠密向量資料

list[float]

sparseData

查詢的稀疏向量資料

SparseData

vectorCount

vector欄位中包含的向量個數

1

int

namespace

查詢向量的空間

""

string

topK

返回個數

100

int

includeVector

是否返迴文檔中的向量資訊

false

bool

outputFields

需要傳回值的欄位列表

[]

list[string]

order

排序次序, ASC:升序 DESC: 降序

ASC

string

searchParams

查詢參數

""

string

filter

過濾運算式

""

string

scoreThreshold

分數過濾, 使用歐式距離時,只返回小於scoreThreshold的結果。使用內積時,只返回大於scoreThreshold的結果

預設不過濾

float

sort

排序運算式

""

string

  • SparseData

參數名稱

描述

預設值

類型

是否必須

count

每個稀疏向量中包含的元素個數

只有一個稀疏向量時預設為indices長度

list[int]

indices

元素下標(需要從小到大排序)

list[int]

values

元素值(與下標一一對應)

list[float]

向量檢索版將稀疏向量下標和值用獨立的兩個多重值欄位表示,兩個欄位個數需要相等,位置一一對應。

例如:(0, 0.5), (100, 0.9), (40, 0.3), (50, 0.7), (20, 0.6),表示成:

{
  "indices": [0, 100, 40, 50, 20],
  "values": [0.5, 0.9, 0.3, 0.7, 0.6]
}

在資料寫入和查詢時要求下標值按從小到大排序,值做相應的調整,最終表示為:

{
  "indices": [0, 20, 40, 50, 100],
  "values": [0.5, 0.6, 0.3, 0.7, 0.9]
}

查詢權重

混合查詢時,相同文檔的最終分數是將稠密向量的距離和稀疏向量的距離加和,如果需要給稀疏向量和稠密向量不同的權重,可以做如下處理:

{
    "vector": [v * weight for v in dense_vector],
    "sparseData": {
        "indices": sparse_data["indices"],
        "values": [v * (1 - weight) for v in sparse_data["values"]]
    }
}

混合查詢

{
    "tableName": "in0",
    "indexName": "vector",
    "vector": [
        0.1,
        0.2,
        0.3,
        0.4,
        0.5
    ],
    "sparseData": {
        "indices": [
            0,
            2
        ],
        "values": [
            1.2,
            2.4
        ]
    },
    "topK": 2,
    "order": "DESC"
}

返回參數

欄位名稱

描述

類型

result

結果清單

list[Item]

totalCount

result中的個數

int

totalTime

引擎處理耗時,單位ms

float

errorCode

錯誤碼,有錯誤時才有該欄位

int

errorMsg

錯誤資訊,有錯誤時才有該欄位

string

item定義

欄位名稱

描述

類型

score

距離分

float

fields

欄位名稱和對應的值

map<string, FieldType>

vector

向量值

list[float]

id

主索引值,類型為所定義的欄位類型

FieldType

namespace

向量的名稱空間,如果設定了namespace會返回該欄位

string

樣本

{
    "totalCount": 50,
    "result": [
        {
            "id": 99,
            "score": 0.18588095903396607,
            "__source__": 1,
            "fields": {
                "content": "眾好六類網線RJ45 6類千兆8芯雙絞跳線 寬頻監控家用網線成品線"
            }
        }
    ],
    "totalTime": 4.057
}