全部產品
Search
文件中心

Tair (Redis® OSS-Compatible):Vector

更新時間:Oct 17, 2024

TairVector是Tair自研的擴充資料結構,提供高效能、即時,集儲存、檢索於一體的向量資料庫服務。

TairVector簡介

TairVector採用多層Hash的資料結構,如下所示:TairVector資料結構TairVector提供了HNSW(Hierarchical Navigable Small World)和暴力搜尋(Flat Search)兩種索引演算法:

  • HNSW:以圖結構構建向量檢索的索引,支援非同步空間回收,可以在保證高查詢精度的同時,均衡即時更新的效能表現。

  • 暴力搜尋:具有100%查詢精度,插入資料速度快,適用於小規模資料集。

同時,TairVector支援歐式距離(Euclidean distance)、向量內積(Internal product)、餘弦距離(Cosine distance)和Jaccard距離(Jaccard distance)等多種距離函數。相對於傳統的向量檢索服務,TairVector的優勢如下:

  • 所有資料均在記憶體中,支援即時更新索引,具有更短的讀寫時延。

  • 最佳化記憶體資料結構,佔用空間更小。

  • 開箱即用,以雲端服務的方式整體申請即可使用,整體架構簡單高效,沒有複雜組件依賴。

  • 支援向量檢索與全文檢索索引組合的混合檢索。

  • 支援建立標量(標籤屬性等)倒排索引,並提供先標量後向量的KNN檢索特性。

發布記錄

  1. 2022年10月13日隨Tair記憶體型(相容Redis 6.0)首次發布TairVector。

  2. 2022年11月22日發布6.2.2.0版本,新增支援Jaccard距離函數、TVS.GETINDEX命令支援統計每個索引的記憶體佔用(index_data_sizeattribute_data_size)。

  3. 2022年12月26日發布6.2.3.0版本,支援叢集代理模式,新增FLOAT16的向量資料類型,新增TVS.MINDEXKNNSEARCHTVS.MINDEXMKNNSEARCH命令。

  4. 2023年07月04日發布6.2.8.2版本,支援餘弦距離、支援HNSW索引垃圾自動回收。

  5. 2023年08月03日發布23.8.0.0版本,支援對Index中的key層級設定TTL(新增TVS.HEXPIREATTVS.HPEXPIREAT等命令),支援對指定Key列表進行向量近鄰查詢(新增TVS.GETDISTANCE命令),支援全文檢索索引(更新TVS.CREATEINDEXTVS.KNNSEARCH等命令),可以實現向量檢索與全文檢索索引組合的混合檢索。

  6. 2024年06月06日發布24.5.1.0版本,新增TVS.KNNSEARCHFIELDTVS.MINDEXKNNSEARCHFIELD命令,支援在近鄰查詢時返回標籤屬性資訊。

  7. 2024年07月22日發布24.7.0.0版本,支援在稀疏向量中使用HNSW索引。

最佳實務

前提條件

執行個體的儲存介質為記憶體型(相容Redis 6.0及以上)。

說明

記憶體型(相容Redis 5.0)執行個體暫不支援升級至記憶體型(相容Redis 6.0),如需使用請建立執行個體。

注意事項

  • 操作對象為Tair執行個體中的TairVector資料。

  • TairVector資料結構的index_name、Key等暫不支援Redis的Hashtags特性。

  • TairVector暫不支援MOVE等特性。

  • 若業務情境對資料持久化要求較高,建議開啟半同步功能,將#no_loose_tsync-repl-mode參數的值改為semisync,具體操作請參見設定執行個體參數

命令列表

表 1. TairVector命令

類型

命令

文法

說明

索引中繼資料操作

TVS.CREATEINDEX

TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key alog_param_value] ...

建立一個向量索引空間,同時指定構建索引和查詢的具體演算法,以及距離函數。該對象僅能通過TVS.DELINDEX命令刪除。

TVS.GETINDEX

TVS.GETINDEX index_name

查詢指定的向量索引,擷取該向量索引的中繼資料資訊。

TVS.DELINDEX

TVS.DELINDEX index_name

刪除指定的向量索引及該索引內的所有資料。

TVS.SCANINDEX

TVS.SCANINDEX cursor [MATCH pattern] [COUNT count]

掃描Tair執行個體中所有合格向量索引。

向量資料操作

TVS.HSET

TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ...

往向量索引中插入資料記錄(key),若該記錄已存在則更新並覆蓋原記錄。

TVS.HGETALL

TVS.HGETALL index_name key

查詢指定向量索引中的key對應的所有資料記錄。

TVS.HMGET

TVS.HMGET index_name key attribute_key [attribute_key ...]

查詢指定向量索引的key中對應的attribute_key所對應的數值。

TVS.DEL

TVS.DEL index_name key [key ...]

在指定向量索引中,刪除指定資料記錄(key)。

TVS.HDEL

TVS.HDEL index_name key attribute_key [attribute_key ...]

在向量索引的資料記錄(key)中,刪除指定的attribute_key與其數值。

TVS.SCAN

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

在指定向量索引中,掃描合格資料記錄(key)。

TVS.HINCRBY

TVS.HINCRBY index_name key attribute_key num

在指定向量索引中,將指定資料記錄(key)的attribute_key的值增加num,num為一個整數。

TVS.HINCRBYFLOAT

TVS.HINCRBYFLOAT index_name key attribute_key num

在指定向量索引中,將指定資料記錄(key)的attribute_key的值增加num,num為一個浮點數。

TVS.HPEXPIREAT

TVS.HPEXPIREAT index_name key milliseconds-timestamp

在指定向量索引中,為指定資料記錄(key)設定絕對到期時間,精確到毫秒。

TVS.HPEXPIRE

TVS.HPEXPIRE index_name key milliseconds-timestamp

在指定向量索引中,為指定資料記錄(key)設定相對到期時間,精確到毫秒。

TVS.HEXPIREAT

TVS.HEXPIREAT index_name key timestamp

在指定向量索引中,為指定資料記錄(key)設定絕對到期時間,精確到秒。

TVS.HEXPIRE

TVS.HEXPIRE index_name key timestamp

在指定向量索引中,為指定資料記錄(key)設定相對到期時間,精確到秒。

TVS.HPTTL

TVS.HPTTL index_name key

在指定向量索引中,查看指定資料記錄(key)的剩餘到期時間,精確到毫秒。

TVS.HTTL

TVS.HTTL index_name key

在指定向量索引中,查看指定資料記錄(key)的剩餘到期時間,精確到秒。

TVS.HPEXPIRETIME

TVS.HPEXPIRETIME index_name key

在指定向量索引中,查看指定資料記錄(key)的絕對到期時間,精確到毫秒。

TVS.HEXPIRETIME

TVS.HEXPIRETIME index_name key

在指定向量索引中,查看指定資料記錄(key)的絕對到期時間,精確到秒。

向量近鄰查詢

TVS.KNNSEARCH

TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value]

在指定向量索引中,對指定的向量(VECTOR)進行近鄰查詢,最多可返回topN條。

TVS.KNNSEARCHFIELD

TVS.KNNSEARCHFIELD index_name topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

在指定向量索引中,對指定的向量(VECTOR)進行近鄰查詢,檢索邏輯與TVS.KNNSEARCH相同,額外支援返回標籤屬性。

TVS.GETDISTANCE

TVS.GETDISTANCE index_name vector key_count key [key, ...] [TOPN topN] [FILTER filter_string] [MAX_DIST max_distance]

在指定向量索引中,針對指定Key列表,進行向量(VECTOR)近鄰查詢。

TVS.MKNNSEARCH

TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value]

在指定向量索引中,批量對多條向量(VECTOR)進行近鄰查詢。

TVS.MINDEXKNNSEARCH

TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value]

在多個向量索引中,對指定的向量(VECTOR)進行近鄰查詢。

TVS.MINDEXKNNSEARCHFIELD

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

在多個向量索引中,對指定的向量(VECTOR)進行近鄰查詢,支援返回標籤屬性。

TVS.MINDEXMKNNSEARCH

TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value]

在多個向量索引中,批量對多條向量(VECTOR)進行近鄰查詢。

說明

本文的命令文法定義如下:

  • 大寫關鍵字:命令關鍵字。

  • 斜體:變數。

  • [options]:選擇性參數,不在括弧中的參數為必選。

  • A|B:該組參數互斥,請進行二選一或多選一。

  • ...:前面的內容可重複。

TVS.CREATEINDEX

類別

說明

文法

TVS.CREATEINDEX index_name dims algorithm distance_method [algo_param_key alog_param_value] ...

時間複雜度

O(1)

命令描述

建立一個向量索引空間,同時指定構建索引和查詢的具體演算法,以及距離函數。該對象僅能通過TVS.DELINDEX命令刪除。

選項

  • index_name:向量索引名稱。

  • dims:向量維度,插入該索引的向量需具有相同的向量維度,取值範圍為[1, 32768]。

  • algorithm:構建、查詢索引的演算法,取值如下:

    • FLAT:不單獨構建索引,採用暴力搜尋的方式執行查詢,適合1萬條以下的小規模資料集。

    • HNSW:採用HNSW圖結構構建整個索引,並通過該演算法進行查詢,適合大規模的資料集。

  • distance_method:計算向量距離函數,取值如下:

    • L2:平方歐氏距離。

    • IP:向量內積,距離值為1-向量內積

    • COSINE:餘弦距離,距離值為1-向量餘弦值。使用餘弦距離會將寫入的向量轉化為單元向量(L2正則化),因此查詢得到的向量結果可能不是原始向量值。

    • JACCARD:Jaccard距離,距離值為1-Jaccard係數,且需指定向量資料類型(data_type)為BINARY

  • algo_param_keyalog_param_value

    • data_type:(稠密)向量的資料類型,取值說明如下。

      • FLOAT32(預設):4位元組的單精確度浮點數。

      • FLOAT16:2位元組的半精度浮點數(IEEE 754-2008標準),可節省向量儲存空間,但會損失一定的精度,FLOAT16能表示的最大數值範圍為[-65519, 65519]。

      • BINARY:二進位向量,僅能包含0或1,僅支援Jaccard距離函數。

    • HNSW索引的特定參數,取值說明如下:

      • ef_construct:使用HNSW演算法構建索引時,動態列表的長度。預設為100,取值範圍為[1,1000],該值越大則ANN查詢精度越高,同時效能開銷越大。

      • M:圖索引結構中,每一層的最大出邊數量。預設為16,取值範圍為[1,100]。該值越大則ANN查詢精度越高,同時效能開銷越大。

      • auto_gc:自動回收索引空間,取值為false(預設,表示關閉)、true(表示開啟),該功能要求執行個體的小版本為6.2.8.2及以上。HNSW索引的向量刪除採用標記刪除的方式,開啟該功能後,支援索引空間的自動回收,可有效降低記憶體佔用,但該功能會影響該索引近鄰查詢的效能,推薦對記憶體佔用量敏感的情境使用該功能。

    • HybridIndex(混合索引)的特定參數,取值說明如下:

      • 如需對指定標籤欄位建立倒排索引,需提前指定欄位名稱與對應的資料類型。

        文法為inverted_index_<field_name> int|long|float|double|string,對field_name欄位建立倒排索引,支援的類型為Int、Long、Float、Double和String,field_name欄位和資料類型關鍵字需小寫。

        例如希望對productname欄位(String類型)建立倒排索引的樣本為inverted_index_productname string

      • lexical_algorithm:全文檢索索引演算法。

        • bm25:BM25(Okapi BM25)演算法,您可傳入原始文本,由Tair向量服務構建索引。

        • vector:Vector演算法,適用於稀疏向量。

          您需要對原始文本進行編碼(Embedding),傳入稀疏向量。資料格式為"[[2,0.221],[42,09688],...]",其中Key為Indices,類型為uint32_t,Value為該Index的詞頻概覽,類型為Float。

      • lexical_algorithm設定為bm25,您還可以設定如下參數。

        • analyzer:分詞器,當前支援jieba(預設)、ik_smart

        • k1:BM25演算法中控制詞頻飽和度,預設為1.2,取值範圍需大於0。

        • b:BM25演算法中控制文檔長度的影響,預設為0.75,取值範圍為[0,1]。

      • lexical_algorithm設定為vector,您還可以設定如下參數。

        • lexical_use_hnsw:稀疏向量是否使用HNSW索引,取值:1(使用HNSW索引)、0(預設,使用倒排索引)。

        • lexical_hnsw_m:當lexical_use_hnsw為1時,該參數為HNSW索引的M參數,作用與說明請參見HNSW索引的特定參數

        • lexical_hnsw_ef_construct:當lexical_use_hnsw為1時,該參數為HNSW索引的ef_construct參數,作用與說明請參見HNSW索引的特定參數

      • hybrid_ratio:該索引在查詢時向量檢索的預設權重,預設為0.5,取值範圍為[0,1],Float類型,全文檢索索引的權重為1-hybrid_ratio

傳回值

  • 執行成功:返回OK。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

# 建立向量儲存結構:向量維度為2、索引類型為HNSW、距離函數為Jaccard、向量資料類型為BINARY。
TVS.CREATEINDEX index_name0 2 HNSW JACCARD data_type BINARY

# 建立向量儲存結構:向量維度為2、索引類型為HNSW、距離函數為L2、向量資料類型為FLOAT32。
TVS.CREATEINDEX index_name1 2 HNSW L2 

# 建立向量儲存結構:向量維度為2、索引類型為FLAT、距離函數為IP、向量資料類型為FLOAT32。
TVS.CREATEINDEX index_name2 2 FLAT IP 

# 建立向量儲存結構:向量維度為2、索引類型為FLAT、距離函數為Jaccard、向量資料類型為BINARY。
TVS.CREATEINDEX index_name3 2 FLAT JACCARD data_type BINARY

# 建立向量儲存結構:向量維度為2、索引類型為HNSW、距離函數為IP、向量資料類型為FLOAT32、全文檢索索引演算法為BM25,指定productname欄位(String類型)為倒排索引。
TVS.CREATEINDEX index_name4 2 HNSW IP lexical_algorithm bm25 inverted_index_productname string

# 建立稀疏向量儲存結構:向量維度為2、距離函數為IP、使用HNSW索引。
TVS.CREATEINDEX index_name5 2 HNSW IP lexical_algorithm vector lexical_use_hnsw 1 lexical_hnsw_m 8 lexical_hnsw_ef_construct 100

返回樣本均為如下:

OK

TVS.GETINDEX

類別

說明

文法

TVS.GETINDEX index_name

時間複雜度

O(1)

命令描述

查詢指定的向量索引,擷取該向量索引的中繼資料資訊。

選項

  • index_name:向量索引名稱。

傳回值

  • 執行成功:返回該向量索引的中繼資料資訊。

  • 若指定的向量索引不存在,返回(empty array)

  • 其他情況返回相應的異常資訊。

樣本

請提前執行如下命令:

TVS.CREATEINDEX my_index 2 HNSW L2 auto_gc true lexical_algorithm bm25
TVS.HSET my_index key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index key2 VECTOR [5,6] creation_time 1750

命令樣本(以HNSW演算法的向量索引為例):

TVS.GETINDEX my_index

返回樣本:

 1) "lexical_term_count"   // 全文索引分詞數,Int類型。
 2) "0"
 3) "lexical_record_count" // 全文索引文檔數,Int類型。
 4) "0"
 5) "lexical_algorithm"    // 全文索引演算法。
 6) "bm25"
 7) "auto_gc"              // HNSW演算法模式下,是否開啟自動回收索引空間。
 8) "1"
 9) "dimension"            // 向量維度。
10) "2"
11) "attribute_data_size"  // 屬性資訊記憶體佔用(單位:位元組)。
12) "3720"
13) "distance_method"      // 向量距離函數。
14) "L2"
15) "data_type"            // 向量資料類型。
16) "FLOAT32"
17) "algorithm"            // 索引演算法。
18) "HNSW"
19) "index_data_size"      // 向量資料記憶體佔用(單位:位元組)。
20) "105128040"
21) "M"                    // HNSW演算法模式下,圖索引結構中,每一層的最大出邊數量。
22) "16"
23) "data_count"           // 使用者記錄數。
24) "3"
25) "current_record_count" // 總向量數。
26) "3"
27) "ef_construct"         // HNSW演算法模式下,動態列表的長度。
28) "100"
29) "inverted_index_productname" // 倒排索引資訊:欄位名稱、資料類型、數量。
30) "field: productname, type: string, size: 1"
31) "delete_record_count"  // 待回收的向量數。
32) "0"

TVS.DELINDEX

類別

說明

文法

TVS.DELINDEX index_name

時間複雜度

O(N),N為該向量索引中Key的數量。

命令描述

刪除指定的向量索引及該索引內的所有資料。

選項

  • index_name:向量索引名稱。

傳回值

  • 執行成功:刪除向量索引,並返回1。

  • 若指定索引不存在,返回0。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.DELINDEX index_name0

返回樣本:

 (integer) 1

TVS.SCANINDEX

類別

說明

文法

TVS.SCANINDEX cursor [MATCH pattern] [COUNT count]

時間複雜度

O(N),N為Tair執行個體中向量索引數量。

命令描述

掃描Tair執行個體中所有合格向量索引。

選項

  • cursor:指定本次掃描的遊標,從0開始。

  • pattern:模式比對。

  • count:指定本次掃描的數量,預設為10,但無法保證每次迭代都返回精準的元素數量。

傳回值

  • 執行成功,返回一個數組:

    • 第一個元素:下次查詢的遊標,若已掃描完成,則返回0。

    • 第二個元素:本次查詢的向量索引( index_name)名稱。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.SCANINDEX 0

返回樣本:

1) "0"
2) 1) "index_name1"
   2) "index_name0"
   3) "index_name2"
   4) "index_name3"

帶Pattern的查詢樣本:

TVS.SCANINDEX 0 MATCH **name[0|1]

返回樣本:

1) "0"
2) 1) "index_name1"
   2) "index_name0"

TVS.HSET

類別

說明

文法

TVS.HSET index_name key attribute_key attribute_value [attribute_key attribute_value] ...

時間複雜度

若本次插入、更新資料無需建立或更新向量值,則時間複雜度為O(1);否則時間複雜度為O(log(N)),N為該向量索引中Key的數量。

命令描述

往向量索引中插入資料記錄(key),若該記錄已存在則更新並覆蓋原記錄。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識,該對象可通過TVS.DEL命令刪除。

  • attribute_keyattribute_value:該條記錄的數值,為Key-value格式。

    • 插入向量資料:需要將attribute_key設定為VECTOR關鍵字(必須大寫),對應的attribute_value則需要為該向量索引指定維度(dims)的向量資料字串,例如VECTOR [1,2]。一個Key僅支援寫入一個VECTOR資料,若重複寫入會更新並覆蓋原資料。

    • 插入文本資料:在建立索引時已制定HybridIndex相關參數,需要將attribute_key設定為TEXT關鍵字(必須大寫),對應的attribute_value可以是文字格式設定(Text),例如"TairVector是Tair自研的向量資料庫服務",也可以是向量化(Embedding)後的資料,例如"[[2,0.221],[42,09688],...]"

    • 插入其他屬性:可以自訂額外屬性或資訊,例如create_time 1663637425(建立時間)、location Hangzhou(地點)等。

傳回值

  • 執行成功:返回新增的資料記錄數量,若更新已有的欄位則返回0。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HSET my_index key5 VECTOR [7,8] TEXT "TairVector是Tair自研的向量資料庫服務" create_time 1800

返回樣本:

(integer) 3

TVS.HGETALL

類別

說明

文法

TVS.HGETALL index_name key

時間複雜度

O(1)

命令描述

查詢指定向量索引中的key對應的所有資料記錄。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

傳回值

  • 執行成功:返回該key的所有資料記錄。

  • 若指定的向量索引或key不存在,返回(empty array)

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HGETALL index_name0 key0

返回樣本:

1) "VECTOR"
2) "[1,2]"
3) "location"
4) "Hangzhou"
5) "create_time"
6) "1663637425"

TVS.HMGET

類別

說明

文法

TVS.HMGET index_name key attribute_key [attribute_key ...]

時間複雜度

O(1)

命令描述

查詢指定向量索引的key中對應的attribute_key所對應的數值。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

  • attribute_key:待操作的屬性Key,支援指定多個。若需查詢向量資料,需傳入VECTOR關鍵字(必須大寫)。若需查詢全文索引中原生文本資料,需傳入TEXT關鍵字(必須大寫)。

傳回值

  • 執行成功:返回attribute_key對應的數值。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HMGET index_name0 key0 create_time location VECTOR TEXT

返回樣本:

1) "1800"
2) "[7,8]"
3) "TairVector是Tair自研的向量資料庫服務"

TVS.DEL

類別

說明

文法

TVS.DEL index_name key [key ...]

時間複雜度

O(1)

命令描述

在指定向量索引中,刪除指定資料記錄(key)。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識,支援指定多個。

傳回值

  • 執行成功:刪除指定資料記錄(key),並返回刪除key的數量。

  • 若指定索引不存在,返回0。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.DEL index_name0 keyV

返回樣本:

 (integer) 1

TVS.HDEL

類別

說明

文法

TVS.HDEL index_name key attribute_key [attribute_key ...]

時間複雜度

O(1)

命令描述

在向量索引的資料記錄(key)中,刪除指定的attribute_key與其數值。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識,支援指定多個。

  • attribute_key:待操作的屬性Key,支援指定多個。若需刪除向量資料,需傳入VECTOR關鍵字(必須大寫)。若需刪除全量索引資料,需傳入TEXT關鍵字(必須大寫)。

傳回值

  • 執行成功:刪除指定資料,並返回刪除attribute_key的數量。

  • 若指定索引不存在,返回0。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HDEL index_name0 keyc VECTOR

返回樣本:

 (integer) 1

TVS.SCAN

類別

說明

文法

TVS.SCAN index_name cursor [MATCH pattern] [COUNT count] [FILTER filter_string] [VECTOR vector] [MAX_DIST max_distance]

時間複雜度

O(N),N為該向量索引中Key的數量。

命令描述

在指定向量索引中,掃描合格資料記錄(key)。

選項

  • index_name:向量索引名稱。

  • cursor:指定本次掃描的遊標,從0開始。

  • pattern:模式比對。

  • count:指定本次掃描的數量,預設為10,但無法保證每次迭代都返回精準的元素數量。

  • filter_string:過濾條件。

    • 支援+-*/<>!=()&&||等操作符,暫不支援比較字串之間的大小。如需輸入字串,請輸入逸出字元(\),例如create_time > 1663637425 && location == \"Hangzhou\"。

    • 操作符兩側必須用空格隔開,例如"creation_time > 1735"。

    • 不支援flag == true類型的比較,即不支援true、false布爾類型,可以替換為flag == \"true\",當成字串傳遞即可。

  • vector:查詢向量,需要配合max_distance參數使用。

  • max_distance:最大距離限制,必須配合vector參數使用。填寫這兩個參數後,返回結果與vector參數的距離將小於max_distance參數。

傳回值

  • 執行成功,返回一個數組:

    • 第一個元素:下次查詢的遊標,若已掃描完成,則返回0。

    • 第二個元素:本次查詢的資料記錄(key)名稱。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.SCAN index_name0 0

返回樣本:

1) "0"
2) 1) "key0"
   2) "keyV"

TVS.HINCRBY

類別

說明

文法

TVS.HINCRBY index_name key attribute_key num

時間複雜度

O(1)

命令描述

在指定向量索引中,將指定資料記錄(key)的attribute_key的值增加num,num為一個整數。

若指定的attribute_key不存在則自動建立並賦予該值,若該記錄已存在則更新並覆蓋原值。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

  • attribute_key:待操作的屬性Key。

  • num:需要為attribute_key的value增加的整數值。

傳回值

  • 執行成功:添加num後的值。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HINCRBY index_name0 key0 tv01 20 

返回樣本:

(integer) 20

TVS.HINCRBYFLOAT

類別

說明

文法

TVS.HINCRBYFLOAT index_name key attribute_key num

時間複雜度

O(1)

命令描述

在指定向量索引中,將指定資料記錄(key)的attribute_key的值增加num,num為一個浮點數。

若指定的attribute_key不存在則自動建立並賦予該值,若該記錄已存在則更新並覆蓋原值。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

  • attribute_key:待操作的屬性Key。

  • num:需要為attribute_key的value增加的值,類型為Float。

傳回值

  • 執行成功:添加num後的值。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HINCRBYFLOAT index_name0 key0 tv02 9.34

返回樣本:

"9.34"

TVS.HPEXPIREAT

類別

說明

文法

TVS.HPEXPIREAT index_name key milliseconds-timestamp

時間複雜度

O(1)

命令描述

在指定向量索引中,為指定資料記錄(key)設定絕對到期時間,精確到毫秒。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

  • milliseconds-timestamp:精確到毫秒的UNIX時間戳記 (Unix timestamp)。若該時間早於目前時間,則該key會立即到期。

傳回值

  • key存在且設定成功:1。

  • key不存在:0。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HPEXPIREAT index_name0 key1 16914619090000

返回樣本:

(integer) 1

TVS.HPEXPIRE

類別

說明

文法

TVS.HPEXPIRE index_name key milliseconds-timestamp

時間複雜度

O(1)

命令描述

在指定向量索引中,為指定資料記錄(key)設定相對到期時間,精確到毫秒。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

  • milliseconds-timestamp:相對到期時間,單位為毫秒。

傳回值

  • key存在且設定成功:1。

  • key不存在:0。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HPEXPIRE index_name0 key1 1000

返回樣本:

(integer) 1

TVS.HEXPIREAT

類別

說明

文法

TVS.HEXPIREAT index_name key timestamp

時間複雜度

O(1)

命令描述

在指定向量索引中,為指定資料記錄(key)設定絕對到期時間,精確到秒。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

  • timestamp:精確到秒的UNIX時間戳記 (Unix timestamp)。若該時間早於目前時間,則該key會立即到期。

傳回值

  • key存在且設定成功:1。

  • key不存在:0。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HPEXPIREAT index_name0 key2 1691466981

返回樣本:

(integer) 1

TVS.HEXPIRE

類別

說明

文法

TVS.HEXPIRE index_name key timestamp

時間複雜度

O(1)

命令描述

在指定向量索引中,為指定資料記錄(key)設定相對到期時間,精確到秒。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

  • timestamp:相對到期時間,單位為秒。

傳回值

  • key存在且設定成功:1。

  • key不存在:0。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HPEXPIREAT index_name0 key2 100

返回樣本:

(integer) 1

TVS.HPTTL

類別

說明

文法

TVS.HPTTL index_name key

時間複雜度

O(1)

命令描述

在指定向量索引中,查看指定資料記錄(key)的剩餘到期時間,精確到毫秒。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

傳回值

  • key存在且設定了到期時間:剩餘到期時間,單位為毫秒。

  • key存在但未設定到期時間:-1。

  • keyindex_name不存在:-2。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HPTTL index_name0 key2

返回樣本:

(integer) 65417

TVS.HTTL

類別

說明

文法

TVS.HTTL index_name key

時間複雜度

O(1)

命令描述

在指定向量索引中,查看指定資料記錄(key)的剩餘到期時間,精確到秒。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

傳回值

  • key存在且設定了到期時間:剩餘到期時間,單位為秒。

  • key存在但未設定到期時間:-1。

  • keyindex_name不存在:-2。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HTTL index_name0 key2

返回樣本:

(integer) 58

TVS.HPEXPIRETIME

類別

說明

文法

TVS.HPEXPIRETIME index_name key

時間複雜度

O(1)

命令描述

在指定向量索引中,查看指定資料記錄(key)的絕對到期時間,精確到毫秒。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

傳回值

  • key存在且設定了到期時間:絕對到期時間(Unix timestamp),單位為毫秒。

  • key存在但未設定到期時間:-1。

  • keyindex_name不存在:-2。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HPEXPIRETIME index_name0 key2

返回樣本:

(integer) 1691473985764

TVS.HEXPIRETIME

類別

說明

文法

TVS.HEXPIRETIME index_name key

時間複雜度

O(1)

命令描述

在指定向量索引中,查看指定資料記錄(key)的絕對到期時間,精確到秒。

選項

  • index_name:向量索引名稱。

  • key:該記錄的主鍵標識。

傳回值

  • key存在且設定了到期時間:絕對到期時間(Unix timestamp),單位為秒。

  • key存在但未設定到期時間:-1。

  • keyindex_name不存在:-2。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TVS.HEXPIRETIME index_name0 key2

返回樣本:

(integer) 1691473985

TVS.KNNSEARCH

類別

說明

文法

TVS.KNNSEARCH index_name topN vector [filter_string] [param_key param_value]

時間複雜度

  • HNSW演算法:O(log(N))

  • FLAT演算法:O(N)

N為該向量索引中Key的數量。

命令描述

在指定向量索引中,對指定的向量(VECTOR)進行近鄰查詢,最多可返回topN條。

選項

  • index_name:向量索引名稱。

  • topN:查詢返回的數量,取值範圍為[1,10000]。

  • vector:執行近鄰查詢的向量值。若您僅希望執行全文檢索索引(索引為混合索引),可在該欄位傳入""

  • filter_string:過濾條件。

    • 支援+-*/<>!=()&&||等操作符,暫不支援比較字串之間的大小。如需輸入字串,請輸入逸出字元(\),例如"create_time > 1663637425 && location == \"Hangzhou\""

    • 操作符兩側必須用空格隔開,例如"creation_time > 1735"

    • 不支援flag == true類型的比較,即不支援true、false布爾類型,可以替換為flag == \"true\",當成字串傳遞即可。

  • param_keyparam_value:查詢的運行參數,取值如下。

    • ef_search:查詢索引的時候,動態列表的長度,預設為100,取值範圍為[1,1000],該值越大則查詢精度越高,同時效能開銷越大。該參數為HNSW演算法的特定參數。

      sparse_ef_search:在建立混合索引時,如果稀疏向量使用了HNSW索引,則請使用sparse_ef_search參數為稀疏向量HNSW索引的ef_search參數。

    • MAX_DIST:最大距離限制,Float類型,若某Key與待查詢向量的距離大於該值,則會過濾,不會返回。

    • TEXT:執行查詢的文本(混合檢索),可傳入文本類型或向量類型,若不傳入該欄位或在該欄位傳入"",表示不進行全文檢索索引,僅執行向量檢索。

    • hybrid_ratio:本次查詢時向量檢索的權重,預設為TVS.CREATEINDEX設定的hybrid_ratio值,取值範圍為[0,1],Float類型,全量檢索的權重為1-hybrid_ratio

    • 預設情況下,系統使用先執行KNN向量檢索、再執行標量檢索的後置過濾(PostFilter)策略。

      • vector_filter_count:向量檢索過濾的最大數量,預設為10000。

        在PostFilter策略中,當向量檢索結果過濾超過vector_filter_count條記錄,但仍未到達足夠返回的資料量時,系統會終止向量檢索遍曆。

      • fulltext_filter_count:全文檢索索引過濾的最大數量,預設為10000。

        在PostFilter策略中,當全文檢索索引結果過濾超過fulltext_filter_count條記錄,但仍未到達足夠返回的資料量時,系統會終止全文檢索索引遍曆。

      • 若您希望系統先執行倒排索引的標量檢索,再執行KNN向量檢索的前置過濾(PreFilter)策略,您可以在查詢中增加search_policy scala參數。

        同時提供ivf_filter_count參數,即倒排索引過濾的最大數量,預設為10000。在PreFilter策略中,當倒排索引過濾的結果超過ivf_filter_count條記錄時,系統會自動退化為PostFilter策略。

      說明

      在絕大多數情況下,上述預設參數可以在確保準確性的前提下保證系統的延遲。您可以在特定請求中調整上述參數,但上述參數越大,請求延遲也可能越大。

傳回值

  • 執行成功:按距離近到遠的順序返回近鄰的key及與該目標向量的距離。

  • 若指定的向量索引不存在,返回(empty array)

  • 其他情況返回相應的異常資訊。

樣本

請提前執行如下命令:

TVS.CREATEINDEX my_index_k 2 HNSW L2 inverted_index_productname string
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730 productname "Aliyun"
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740 productname "other"
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750 productname "Aliyun"

命令樣本1:

TVS.KNNSEARCH my_index_k 2 [3,3.1] "creation_time > 1735"

返回樣本1:

1) "key1"
2) "0.81000018119812012"
3) "key2"
4) "12.410000801086426"

命令樣本2:

TVS.KNNSEARCH my_index_k 2 [3,3.1]  "creation_time > 1735 && productname ==  \"Aliyun\"" search_policy scala ivf_filter_count 15000

返回樣本2:

1) "key2"
2) "12.410000801086426"

TVS.KNNSEARCHFIELD

類別

說明

文法

TVS.KNNSEARCHFIELD index_name topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

時間複雜度

  • HNSW演算法:O(log(N))

  • FLAT演算法:O(N)

N為該向量索引中Key的數量。

命令描述

在指定向量索引中,對指定的向量(VECTOR)進行近鄰查詢,檢索邏輯與TVS.KNNSEARCH相同,額外支援返回標籤屬性。

選項

  • index_name:向量索引名稱。

  • topN:查詢返回的數量,取值範圍為[1,10000]。

  • vector:執行近鄰查詢的向量值。若您僅希望執行全文檢索索引(索引為混合索引),可在該欄位傳入""

  • field_count:返回結果中標籤屬性的數量,若希望返回所有標籤,可以設定field_count為0。

  • field_name:標籤名稱,數量需要與field_count保持一致。

  • filter_string:過濾條件,更多資訊請參見TVS.KNNSEARCH中的說明。

  • param_keyparam_value:查詢的運行參數,更多資訊請參見TVS.KNNSEARCH中的說明。

傳回值

  • 執行成功:按距離近到遠的順序返回近鄰的key及與該目標向量的距離,以及對應的標籤屬性索引值對。

  • 若指定的向量索引不存在,返回(empty array)

  • 其他情況返回相應的異常資訊。

樣本

請提前執行如下命令:

TVS.CREATEINDEX my_index_k 2 HNSW L2
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750

命令樣本:

TVS.KNNSEARCHFIELD my_index_k 2 [3,3.1] 0 "creation_time > 1735"

返回樣本:

1) 1) "key1"
   2) "0.81000018119812012"
   3) "VECTOR"
   4) "[3,4]"
   5) "creation_time"
   6) "1740"
2) 1) "key2"
   2) "12.410000801086426"
   3) "VECTOR"
   4) "[5,6]"
   5) "creation_time"
   6) "1750"

TVS.GETDISTANCE

類別

說明

文法

TVS.GETDISTANCE index_name vector key_count key [key, ...] [TOPN topN] [FILTER filter_string] [MAX_DIST max_distance]

時間複雜度

  • HNSW演算法:O(log(N))

  • FLAT演算法:O(N)

N為該向量索引中Key的數量。

命令描述

在指定向量索引中,針對指定Key列表,進行向量(VECTOR)近鄰查詢。

選項

  • index_name:向量索引名稱。

  • vector:執行近鄰查詢的向量值。

  • key_count:候選Key的數量。

  • key:Key名稱,Key的數量需要與key_count一致。

  • TOPN:查詢返回的數量,預設為key_count,取值範圍為[1,key_count]。

  • FILTER:過濾條件。

    • 支援+-*/<>!=()&&||等操作符,暫不支援比較字串之間的大小。如需輸入字串,請輸入逸出字元(\),例如create_time > 1663637425 && location == \"Hangzhou\"

    • 操作符兩側必須用空格隔開,例如"creation_time > 1735"

    • 不支援flag == true類型的比較,即不支援true、false布爾類型,可以替換為flag == \"true\",當成字串傳遞即可。

  • MAX_DIST:最大距離限制,若某Key與待查詢向量的距離大於該值,則會過濾,不會返回。

傳回值

  • 執行成功:預設按Key的順序返回對應距離,若指定了TOPN,則按距離近到遠的順序返回近鄰Key與對應距離。

  • 若指定的向量索引不存在,返回(empty array)

  • 其他情況返回相應的異常資訊。

樣本

請提前執行如下命令:

TVS.CREATEINDEX my_index_k 2 HNSW L2
TVS.HSET my_index_k key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_k key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_k key2 VECTOR [5,6] creation_time 1750

命令樣本:

TVS.GETDISTANCE my_index_k [1,1] 2 key1 key2

返回樣本:

1) "key1"
2) "13"
3) "key2"
4) "41"

TVS.MKNNSEARCH

類別

說明

文法

TVS.MKNNSEARCH index_name topN vector_count vector [vector ...] [filter_string] [param_key param_value]

時間複雜度

  • HNSW演算法:vector_count * O(log(N))

  • FLAT演算法:vector_count * O(N)

N為該向量索引中Key的數量。

命令描述

在指定向量索引中,批量對多條向量(VECTOR)進行近鄰查詢。

選項

  • index_name:向量索引名稱。

  • topN:每條向量查詢返回的數量,取值範圍為[1,10000]。

  • vector_count :查詢的向量數。

  • vector:執行近鄰查詢的向量值。若您僅希望執行全文檢索索引(索引為混合索引),可在該欄位傳入""

  • filter_string:過濾條件,更多資訊請參見TVS.KNNSEARCH中的說明。

  • param_keyparam_value:查詢的運行參數,更多資訊請參見TVS.KNNSEARCH中的說明。

傳回值

  • 執行成功:按向量查詢順序返回多個查詢結果數組,每個數組中按距離近到遠的順序返回近鄰的key及與該目標向量的距離。

  • 若指定的向量索引不存在,返回(empty array)

  • 其他情況返回相應的異常資訊。

樣本

請提前執行如下命令:

TVS.CREATEINDEX my_index_m 2 HNSW L2
TVS.HSET my_index_m key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_m key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_m key2 VECTOR [5,6] creation_time 1750

命令樣本:

TVS.MKNNSEARCH my_index_m 2 2 [3,4] [5,6] "creation_time > 1735"

返回樣本:

1) 1) "key1"
   2) "0"
   3) "key2"
   4) "8"
2) 1) "key2"
   2) "0"
   3) "key1"
   4) "8"

TVS.MINDEXKNNSEARCH

類別

說明

文法

TVS.MINDEXKNNSEARCH index_count index_name [index_name ...] topN vector [filter_string] [param_key param_value]

時間複雜度

  • HNSW演算法:index_count * O(log(N))

  • FLAT演算法:index_count * O(N)

N為該向量索引中Key的數量。

命令描述

在多個向量索引中,對指定的向量(VECTOR)進行近鄰查詢。

選項

  • index_count:向量索引的數量。

  • index_name:向量索引名稱。

  • topN:查詢返回的數量,取值範圍為[1,10000],預設會查詢出每個向量索引的topN個結果,並將所有查詢結果進行彙總,返回距離最近的topN個結果。

  • vector:執行近鄰查詢的向量值。

  • filter_string:過濾條件,更多資訊請參見TVS.KNNSEARCH中的說明。

  • param_keyparam_value:查詢的運行參數,更多資訊請參見TVS.KNNSEARCH中的說明。

傳回值

  • 執行成功:按距離近到遠的順序返回近鄰的key及與該目標向量的距離。

  • 若指定的向量索引不存在,返回(empty array)

  • 其他情況返回相應的異常資訊。

樣本

請提前執行如下命令:

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

命令樣本:

TVS.MINDEXKNNSEARCH 2 my_index_mk my_index_mx 2 [0,0]

返回樣本:

1) "key0"
2) "5"
3) "key7"
4) "25"

TVS.MINDEXKNNSEARCHFIELD

類別

說明

文法

TVS.MINDEXKNNSEARCHFIELD index_count index_name [index_name ...] topN vector field_count field_name [field_name ...] [filter_string] [param_key param_value]

時間複雜度

  • HNSW演算法:index_count * O(log(N))

  • FLAT演算法:index_count * O(N)

N為該向量索引中Key的數量。

命令描述

在多個向量索引中,對指定的向量(VECTOR)進行近鄰查詢,支援返回標籤屬性。

選項

  • index_count:向量索引的數量。

  • index_name:向量索引名稱。

  • topN:查詢返回的數量,取值範圍為[1,10000],預設會查詢出每個向量索引的topN個結果,並將所有查詢結果進行彙總,返回距離最近的topN個結果。

  • vector:執行近鄰查詢的向量值。

  • field_count:返回結果中標籤屬性的數量,若希望返回所有標籤,可以設定field_count為0。

  • field_name:標籤名稱,數量需要與field_count保持一致。

  • filter_string:過濾條件,更多資訊請參見TVS.KNNSEARCH中的說明。

  • param_keyparam_value:查詢的運行參數,更多資訊請參見TVS.KNNSEARCH中的說明。

傳回值

  • 執行成功:按距離近到遠的順序返回近鄰的key及與該目標向量的距離,以及對應的標籤屬性索引值對。

  • 若指定的向量索引不存在,返回(empty array)

  • 其他情況返回相應的異常資訊。

樣本

請提前執行如下命令:

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

命令樣本:

TVS.MINDEXKNNSEARCHFIELD 2 my_index_mk my_index_mx 2 [0,0] 0

返回樣本:

1) 1) "key0"
   2) "5"
   3) "my_index_mk"
   4) "VECTOR"
   5) "[1,2]"
   6) "creation_time"
   7) "1730"
2) 1) "key1"
   2) "25"
   3) "my_index_mk"
   4) "VECTOR"
   5) "[3,4]"
   6) "creation_time"
   7) "1740"

TVS.MINDEXMKNNSEARCH

類別

說明

文法

TVS.MINDEXMKNNSEARCH index_count index_name [index_name ...] topN vector_count vector [vector ...] [filter_string] [param_key param_value]

時間複雜度

  • HNSW演算法:index_count * vector_count * O(log(N))

  • FLAT演算法:index_count * vector_count * O(N)

N為該向量索引中Key的數量。

命令描述

在多個向量索引中,批量對多條向量(VECTOR)進行近鄰查詢。

選項

  • index_count:向量索引的數量。

  • index_name:向量索引名稱。

  • topN:每條向量查詢返回的數量,取值範圍為[1,10000],預設會查詢出每個向量索引的topN個結果,並將所有查詢結果進行彙總,返回距離最近的topN個結果。

  • vector_count :查詢的向量數。

  • vector:執行近鄰查詢的向量值。

  • filter_string:過濾條件,更多資訊請參見TVS.KNNSEARCH中的說明。

  • param_keyparam_value:查詢的運行參數,更多資訊請參見TVS.KNNSEARCH中的說明。

傳回值

  • 執行成功:按向量查詢順序返回多個查詢結果數組,每個數組中按距離近到遠的順序返回近鄰的key及與該目標向量的距離。

  • 若指定的向量索引不存在,返回(empty array)

  • 其他情況返回相應的異常資訊。

樣本

請提前執行如下命令:

TVS.CREATEINDEX my_index_mk 2 HNSW L2
TVS.HSET my_index_mk key0 VECTOR [1,2] creation_time 1730
TVS.HSET my_index_mk key1 VECTOR [3,4] creation_time 1740
TVS.HSET my_index_mk key2 VECTOR [5,6] creation_time 1750
TVS.CREATEINDEX my_index_mx 2 HNSW L2
TVS.HSET my_index_mx key5 VECTOR [8,7] creation_time 1730
TVS.HSET my_index_mx key6 VECTOR [6,5] creation_time 1740
TVS.HSET my_index_mx key7 VECTOR [4,3] creation_time 1750

命令樣本:

TVS.MINDEXMKNNSEARCH 2 my_index_mk my_index_mx 2 2 [0,0] [3,3]

返回樣本:

1) 1) "key0"
   2) "5"
   3) "key7"
   4) "25"
2) 1) "key1"
   2) "1"
   3) "key7"
   4) "1"