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
}