功能說明
向量查詢是指使用者將產生好的向量資料匯入到向量檢索版執行個體中,進行向量檢索的查詢方式。
注:若您沒有向量模型對您的資料產生向量,可以通過向量檢索版提供的圖片向量化、文本向量化的功能將您的資料通過內建的向量模型產生向量,再通過預測查詢進行檢索。
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
}