

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# FT.CREATE
<a name="vector-search-commands-ft.create"></a>

 建立索引並啟動該索引的回填。如需詳細資訊，請參閱[向量搜尋概觀](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html)以取得索引建構的詳細資訊。

**語法**

```
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 金鑰，欄位識別符是 JSON 路徑。

  如需詳細資訊，請參閱[索引欄位類型](vector-search-overview.md#vector-search-index-field-types)。
+ 欄位類型：
  + TAG：如需詳細資訊，請參閱[標籤](https://redis.io/docs/interact/search-and-query/advanced-concepts/tags/) 。
  + NUMERIC：欄位包含數字。
  + 文字：欄位包含任何資料 Blob。
  + VECTOR：支援向量搜尋的向量欄位。
    + 演算法 – 可以是 HNSW (Hierarchical Navigable Small World) 或 FLAT （暴力破解）。
    + `attr_count` – 作為演算法組態傳遞的屬性數量，這包括名稱和值。
    + `{attribute_name} {attribute_value}` – 定義索引組態的演算法特定金鑰/值對。

      對於 FLAT 演算法，屬性為：

      必要：
      + DIM – 向量中的維度數量。
      + DISTANCE\$1METRIC – 可以是 【L2 \$1 IP \$1 COSINE】 之一。
      + TYPE – 向量類型。唯一支援的類型是 `FLOAT32`。

      選用：
      + INITIAL\$1CAP – 索引中的初始向量容量會影響索引的記憶體配置大小。

      對於 HNSW 演算法，屬性為：

      必要：
      + TYPE – 向量類型。唯一支援的類型是 `FLOAT32`。
      + DIM – 向量維度，指定為正整數。上限：32768
      + DISTANCE\$1METRIC – 可以是 【L2 \$1 IP \$1 COSINE】 之一。

      選用：
      + INITIAL\$1CAP – 索引中的初始向量容量會影響索引的記憶體配置大小。預設為 1024。
      + M – 每個圖層中每個節點允許的最大傳出邊緣數量。在圖零上，傳出邊緣的最大數量將為 2M。預設為 16，上限為 512。
      + EF\$1CONSTRUCTION – 控制在索引建構期間檢查的向量數量。此參數的較高值將提高召回率，同時犧牲較長的索引建立時間。預設值為 200。最大值為 4096。
      + EF\$1RUNTIME – 控制查詢操作期間檢查的向量數量。此參數的較高值可能會提高召回率，而犧牲較長的查詢時間。每個查詢都可以覆寫此參數的值。預設值為 10。最大值為 4096。

**傳回**

傳回簡單的字串 OK 訊息或錯誤回覆。

**範例**

**注意**  
下列範例使用 [valkey-cli](https://valkey.io/topics/cli/) 原生的引數，例如資料取消引號和消除逸出，再將其傳送至 Valkey 或 Redis OSS。若要使用其他程式設計語言用戶端 (Python、Ruby、C\$1 等），請遵循這些環境的處理規則來處理字串和二進位資料。如需支援用戶端的詳細資訊，請參閱 [建置工具 AWS](https://aws.amazon.com/developer/tools/)

**Example 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
```

**Example 範例 2：填入一些資料**  
下列命令已格式化，因此可以做為 redis-cli 終端機程式的引數來執行。使用程式設計語言用戶端 （例如 Python、Ruby、C\$1 等） 的開發人員需要遵循其環境的處理規則來處理字串和二進位資料。  
建立一些雜湊和 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 向量項目有六個數字。

**Example 範例 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]}]"
```