本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
FT。CREATE
建立索引並啟動該索引的回填。如需詳細資訊,請參閱向量搜尋概觀以取得索引建構的詳細資訊。
語法
FT.CREATE <index-name> ON HASH | JSON [PREFIX <count> <prefix1> [<prefix2>...]] SCHEMA (<field-identifier> [AS <alias>] NUMERIC | TAG [SEPARATOR <sep>] [CASESENSITIVE] | TEXT | VECTOR [HNSW|FLAT] <attr_count> [<attribute_name> <attribute_value>]) )+
結構描述
欄位識別碼:
對於雜湊金鑰,欄位識別碼是欄位名稱。
對於JSON金鑰,欄位識別符是 A JSON 路徑。
如需詳細資訊,請參閱索引欄位類型。
欄位類型:
TAG:如需詳細資訊,請參閱標籤
。 NUMERIC:欄位包含數字。
TEXT:欄位包含任何資料 Blob。
VECTOR:支援向量搜尋的向量欄位。
演算法 – 可以是 HNSW(階層式可導覽小型世界) 或 FLAT(暴力)。
attr_count
– 將作為演算法組態傳遞的屬性數目,這包括名稱和值。{attribute_name} {attribute_value}
– 定義索引組態的演算法特定索引鍵/值對。對於FLAT演算法,屬性為:
必要:
DIM – 向量中的維度。
DISTANCE_METRIC – 可以是 【L2 | IP | COSINE】 之一。
TYPE – 向量類型。唯一支援的類型是
FLOAT32
。
選用:
INITIAL_CAP – 索引中的初始向量容量會影響索引的記憶體配置大小。
對於HNSW演算法,屬性為:
必要:
TYPE – 向量類型。唯一支援的類型是
FLOAT32
。DIM – 向量維度,指定為正整數。最大值:32768
DISTANCE_METRIC – 可以是 【L2 | IP | COSINE】 之一。
選用:
INITIAL_CAP – 索引中的初始向量容量會影響索引的記憶體配置大小。預設為 1024。
M – 圖中每個層中每個節點允許的最大傳出邊緣數量。在圖零上,傳出邊緣的最大數量將為 2M。預設為 16,上限為 512。
EF_CONSTRUCTION – 控制索引建構期間檢查的向量數量。此參數的較高值將提高召回率,而代價是較長的索引建立時間。預設值為 200。最大值為 4096。
EF_RUNTIME – 控制查詢操作期間檢查的向量數量。此參數的較高值可以提高回收率,而花費較長的查詢時間。此參數的值可以根據每個查詢覆寫。預設值為 10。最大值為 4096。
傳回
傳回簡單的字串 OK 訊息或錯誤回應。
範例
注意
下列範例使用 valkey-cli
範例 1:建立一些索引
為大小為 2 的向量建立索引
FT.CREATE hash_idx1 ON HASH PREFIX 1 hash: SCHEMA vec AS VEC VECTOR HNSW 6 DIM 2 TYPE FLOAT32 DISTANCE_METRIC L2 OK
使用HNSW演算法建立 6 維JSON索引:
FT.CREATE json_idx1 ON JSON PREFIX 1 json: SCHEMA $.vec AS VEC VECTOR HNSW 6 DIM 6 TYPE FLOAT32 DISTANCE_METRIC L2 OK
範例 2:填入一些資料
下列命令已格式化,因此可以做為 redis-cli 終端機程式的引數來執行。使用程式設計語言用戶端 (例如 Python、Ruby、C# 等) 的開發人員需要遵循其環境的處理規則來處理字串和二進位資料。
建立一些雜湊和 json 資料:
HSET hash:0 vec "\x00\x00\x00\x00\x00\x00\x00\x00" HSET hash:1 vec "\x00\x00\x00\x00\x00\x00\x80\xbf" JSON.SET json:0 . '{"vec":[1,2,3,4,5,6]}' JSON.SET json:1 . '{"vec":[10,20,30,40,50,60]}' JSON.SET json:2 . '{"vec":[1.1,1.2,1.3,1.4,1.5,1.6]}'
注意下列事項:
雜湊和JSON資料的索引鍵具有索引定義的字首。
向量位於索引定義的適當路徑。
雜湊向量會輸入為十六進位資料,而JSON資料會輸入為數字。
向量是適當的長度,二維雜湊向量項目有兩個值為十六進位資料的浮點數,六維 json 向量項目有六個數字。
範例 3:刪除並重新建立索引
FT.DROPINDEX json_idx1 OK FT.CREATE json_idx1 ON JSON PREFIX 1 json: SCHEMA $.vec AS VEC VECTOR FLAT 6 DIM 6 TYPE FLOAT32 DISTANCE_METRIC L2 OK
請注意,新JSON索引使用FLAT
演算法而非HNSW
演算法。另請注意,它將重新索引現有JSON資料:
FT.SEARCH json_idx1 "*=>[KNN 100 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2 1) (integer) 3 2) "json:2" 3) 1) "__VEC_score" 2) "11.11" 3) "$" 4) "[{\"vec\":[1.1, 1.2, 1.3, 1.4, 1.5, 1.6]}]" 4) "json:0" 5) 1) "__VEC_score" 2) "91" 3) "$" 4) "[{\"vec\":[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]}]" 6) "json:1" 7) 1) "__VEC_score" 2) "9100" 3) "$" 4) "[{\"vec\":[10.0, 20.0, 30.0, 40.0, 50.0, 60.0]}]"