全部產品
Search
文件中心

OpenSearch:向量查詢

更新時間:Jul 13, 2024

功能說明

向量查詢是指使用者將產生好的向量資料匯入到向量檢索版執行個體中,進行向量檢索的查詢方式。

:若您沒有向量模型對您的資料產生向量,可以通過向量檢索版提供的圖片向量化文本向量化的功能將您的資料通過內建的向量模型產生向量,再通過預測查詢進行檢索。

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文法

參數名稱

描述

預設值

類型

是否必須

tableName

查詢的表名

string

vector

查詢的向量資料

list[float]

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

排序運算式

如果需要向量相似性和其他的欄位結合排序,可通過__vs_vector_score__ 擷取向量相似性得分,例如:需要用create_gmt 和 向量相似性得分排序,可以在sort裡寫“-create_gmt;+_vs_vector_score__ ”

""

string

單向量查詢

{
    "tableName": "gist",
    "vector": [
        0.1,
        0.2,
        0.3
    ],
    "topK": 3,
    "searchParams":"{\"qc.searcher.scan_ratio\":0.01}",
    "includeVector": true
}

帶namespace查詢

OpenSearch向量檢索版支援通過namespace將索引進行分區,為向量索引配置namespace後,可在指定namespace內查詢,因此不同的查詢請求可以搜尋不同的索引子集。

注意:設定namespace後,查詢時必須指定namespace。

{
    "tableName": "gist",
    "namespace": "space_b",
    "vector": [
        0.1,
        0.2
    ],
    "topK": 3,
    "searchParams":"{\"qc.searcher.scan_ratio\":0.01}",
    "includeVector": true
}

多namespace查詢

為向量索引配置namespace後,支援在多個namespace中查詢。

{
    "tableName": "gist",
    "queries": [
        {
            "vector": [
                0.1,
                0.2,
                0.3
            ],
            "namespace": "space_a"
        },
        {
            "vector": [
                0.4,
                0.5,
                0.6
            ],
            "namespace": "space_b"
        }
    ],
    "topK": 3,
    "searchParams":"{\"qc.searcher.scan_ratio\":0.01}",
    "includeVector": true
}

帶過濾查詢

支援使用filter運算式,指定過濾條件進行查詢。

{
    "tableName": "gist",
    "vector": [
        0.1,
        0.2
    ],
    "topK": 3,
    "searchParams":"{\"qc.searcher.scan_ratio\":0.01}",
    "filter": "a > 10",
    "includeVector": true,
    "outputFields": [
        "a",
        "b"
    ]
}

多向量查詢

可以同時查詢多個向量,這些向量的結果會合并排序,返回最終的topK個結果。例如向量維度為2,同時查詢兩個向量:

{
    "tableName": "gist",
    "vector": [
        0.1,
        0.2,
        0.3,
        0.4
    ],
    "vectorCount": 2,
    "topK": 3,
    "searchParams":"{\"qc.searcher.scan_ratio\":0.01}",
    "includeVector": true,
    "outputFields": [
        "a",
        "b"
    ]
}

返回參數

欄位名稱

描述

類型

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

樣本

{
    "result": [
        {
            "id": 1,
            "score": 1.0508723258972169,
            "vector": [
                0.1,
                0.2,
                0.3
            ]
        },
        {
            "id": 2,
            "score": 1.0329746007919312,
            "vector": [
                0.2,
                0.2,
                0.3
            ]
        },
        {
            "id": 3,
            "score": 0.980593204498291,
            "vector": [
                0.3,
                0.2,
                0.3
            ]
        }
    ],
    "totalCount": 3,
    "totalTime": 2.943
}