

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

# 向量搜尋
<a name="vector-search"></a>

MemoryDB 的向量搜尋可擴展 MemoryDB 的功能。向量搜尋可與現有的 MemoryDB 功能搭配使用。不使用向量搜尋的應用程式不受其存在影響。向量搜尋可在 MemoryDB 可用的所有區域中使用。

向量搜尋可簡化您的應用程式架構，同時提供高速向量搜尋。MemoryDB 的向量搜尋非常適合尖峰效能和擴展是最重要選擇條件的使用案例。您可以使用現有的 MemoryDB 資料，或 Valkey 或 Redis OSS API，來建置機器學習和生成式 AI 使用案例。這包括擷取擴增的產生、異常偵測、文件擷取和即時建議。

截至 6/26/2024， AWS MemoryDB 在熱門向量資料庫之間以最高的取回率提供最快的向量搜尋效能 AWS。

**Topics**
+ [向量搜尋概觀](vector-search-overview.md)
+ [使用案例](vector-search-examples.md)
+ [向量搜尋功能和限制](vector-search-limits.md)
+ [建立啟用向量搜尋的叢集](vector-search-cluster.md)
+ [向量搜尋命令](vector-search-commands.md)

# 向量搜尋概觀
<a name="vector-search-overview"></a>

向量搜尋是以建立、維護和使用索引為基礎。每個向量搜尋操作都會指定單一索引，其操作會受限於該索引，也就是說，一個索引上的操作不會受到任何其他索引上的操作影響。除了建立和銷毀索引的操作之外，可能隨時針對任何索引發出任意數量的操作，這表示在叢集層級，針對多個索引的多個操作可能會同時進行。

個別索引是存在於唯一命名空間中的具名物件，與其他 Valkey 和 Redis OSS 命名空間分開：索引鍵、函數等。每個索引在概念上類似於傳統資料庫資料表，因為它分為兩個維度：資料欄和資料列。資料表中的每一列對應至金鑰。索引中的每個資料欄對應至該索引鍵的成員或部分。在此文件中，術語索引鍵、資料列和記錄相同，可互換使用。同樣地，術語欄、欄位、路徑和成員基本上是相同的，也可以互換使用。

沒有要新增、刪除或修改索引資料的特殊命令。反之，修改索引中索引鍵的現有 **HASH**或 **JSON**命令也會自動更新索引。

**Topics**
+ [索引和 Valkey 和 Redis OSS 金鑰空間](#vector-search-indexes-keyspaces)
+ [索引欄位類型](#vector-search-index-field-types)
+ [向量索引演算法](#vector-search-index-algorithms)
+ [向量搜尋查詢表達式](#vector-search-query-expression)
+ [INFO 命令](#vector-search-ft.info)
+ [向量搜尋安全性](#vector-search-security)

## 索引和 Valkey 和 Redis OSS 金鑰空間
<a name="vector-search-indexes-keyspaces"></a>

在 Valkey 和 Redis OSS 金鑰空間的子集上建構和維護索引。多個索引可以選擇不相交或重疊的鍵空間子集，不受限制。每個索引的金鑰空間是由建立索引時提供的金鑰字首清單所定義。字首清單是選用的，如果省略，整個金鑰空間將是該索引的一部分。索引也會輸入，只涵蓋具有相符類型的索引鍵。目前僅支援 JSON 和 HASH 索引。HASH 索引只會為其字首清單所涵蓋的 HASH 索引鍵編製索引，類似地，JSON 索引只會為其字首清單所涵蓋的 JSON 索引鍵編製索引。索引的鍵空間字首清單中沒有指定類型的鍵會被忽略，不會影響搜尋操作。

當 HASH 或 JSON 命令修改索引鍵空間內索引已更新的索引鍵時。此程序涉及擷取每個索引的宣告欄位，並使用新值更新索引。更新程序是在背景執行緒中完成，這表示索引最終只會與其鍵空間內容一致。因此，在短時間內，在搜尋結果中不會顯示金鑰的插入或更新。在大量系統負載和/或大量資料變動期間，可見性延遲可能會變長。

建立索引是多步驟程序。第一步是執行定義索引的 [FT.CREATE](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.create.html) 命令。成功執行建立會自動啟動第二個步驟 – 回填。回填程序會在背景執行緒中執行，並掃描金鑰空間，尋找新索引字首清單中的金鑰。找到的每個索引鍵都會新增至索引。最後掃描整個金鑰空間，完成索引建立程序。請注意，當回填程序正在執行時，允許索引索引鍵的變動，沒有任何限制，而且索引回填程序不會完成，直到所有索引鍵都正確編製索引為止。不允許在索引進行回填時嘗試查詢操作，並以錯誤終止。回填程序的完成可從該索引的 `FT.INFO`命令輸出 ('backfill\$1status') 決定。

## 索引欄位類型
<a name="vector-search-index-field-types"></a>

索引的每個欄位 （資料欄） 都有特定類型，會在建立索引時宣告，並在索引鍵中指定位置。對於 HASH 金鑰，位置是 HASH 中的欄位名稱。對於 JSON 金鑰，位置是 JSON 路徑描述。修改金鑰時，會擷取與宣告欄位相關聯的資料，並轉換為宣告類型，並存放在索引中。如果資料遺失或無法成功轉換為宣告的類型，則會從索引中省略該欄位。欄位有四種類型，如下所述：
+ **數字欄位**包含單一數字。對於 JSON 欄位，必須遵循 JSON 號碼的數值規則。對於 HASH， 欄位應包含以固定或浮點數標準格式寫入之數字的 ASCII 文字。無論金鑰中的表示法為何，此欄位都會轉換為 64 位元浮點數，以供索引內儲存。數字欄位可與範圍搜尋運算子搭配使用。由於基礎數字存放在具有精確度限制的浮點中，因此適用浮點數字比較的一般規則。
+ **標籤欄位**包含以單一 UTF-8 字串編碼的零個或多個標籤值。字串會使用分隔符號字元 （預設為逗號，但可以覆寫） 剖析為標籤值，並移除開頭和結尾的空格。任何數量的標籤值都可以包含在單一標籤欄位中。標籤欄位可用來透過區分大小寫或區分大小寫的比較，篩選標籤值相等性的查詢。
+ **文字欄位**包含不需要 UTF-8 合規的位元組 Blob。文字欄位可用來裝飾具有應用程式平均值的查詢結果。例如 URL 或文件的內容等。
+ **向量欄位**包含數字向量，也稱為內嵌。向量欄位支援使用指定演算法和距離指標進行固定大小向量的 K 近鄰搜尋 (KNN)。對於 HASH 索引， 欄位應包含以二進位格式編碼的整個向量 (*小端 IEEE 754*)。對於 JSON 金鑰，路徑應該參考填充數字的正確大小陣列。請注意，當 JSON 陣列用作向量欄位時，JSON 金鑰內陣列的內部表示會轉換為所選演算法所需的格式，從而減少記憶體消耗和精確度。使用 JSON 命令的後續讀取操作將產生降低的精確度值。

## 向量索引演算法
<a name="vector-search-index-algorithms"></a>

提供兩種向量索引演算法：
+ **平面** – 平面演算法是索引中每個向量的暴力力線性處理，在距離運算的精確度範圍內產生確切的答案。由於索引的線性處理，此演算法的執行時間對於大型索引可能非常高。
+ **HNSW (HNSW)** – HNSW 演算法是一種替代方法，可提供近似的正確答案，以換取大幅縮短的執行時間。演算法由三個參數 `M`、 `EF_CONSTRUCTION`和 控制`EF_RUNTIME`。前兩個參數是在索引建立時間指定，無法變更。`EF_RUNTIME` 參數具有在建立索引時指定的預設值，但之後可以在任何個別查詢操作上覆寫。這三個參數互動，在擷取和查詢操作期間平衡記憶體和 CPU 消耗，並控制精確 KNN 搜尋的近似品質 （稱為召回率）。

這兩種向量搜尋演算法 （平面和 HNSW) 都支援選用`INITIAL_CAP`參數。指定時，此參數會預先配置索引的記憶體，進而降低記憶體管理開銷並提高向量擷取速率。

像 HNSW 這樣的向量搜尋演算法可能無法有效地處理先前插入向量的刪除或覆寫。使用這些操作可能會導致索引記憶體消耗過多和/或召回品質降低。重新索引是還原最佳記憶體用量和/或召回的方法之一。

## 向量搜尋查詢表達式
<a name="vector-search-query-expression"></a>

[FT.SEARCH](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.search.html) 和 [FT.AGGREGATE ](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.aggregate.html)命令需要查詢表達式。此表達式是由一或多個運算子組成的單一字串參數。每個運算子在索引中使用一個欄位來識別索引中的索引鍵子集。可以使用布林值合併器和括號來組合多個運算子，以進一步增強或限制收集的金鑰集 （或結果集）。

### 萬用字元
<a name="vector-search-query-expression-wildcard"></a>

萬用字元運算子，星號 ('\$1')，符合索引中的所有索引鍵。

### 數值範圍
<a name="vector-search-query-expression-numeric-range"></a>

數值範圍運算子具有下列語法：

```
<range-search> ::= '@' <numeric-field-name> ':' '[' <bound> <bound> ']'
<bound>  ::= <number> | '(' <number>
<number> ::= <integer> | <fixed-point> | <floating-point> | 'Inf' | '-Inf' | '+Inf'
```

<numeric-field-name> 必須是類型 的宣告欄位`NUMERIC`。根據預設，邊界是包含的，但前置開放括號 【'('】 可用來使繫結排斥。 您可以使用 `+Inf`或 `-Inf` 做為其中一個邊界，將範圍搜尋轉換為單一關聯比較 (＜、<=`Inf`、＞、>=)。 無論指定的數值格式為何 （整數、固定點、浮點、無限），數字都會轉換為 64 位元浮點來執行比較，進而降低精確度。

**Example 範例**  

```
@numeric-field:[0 10]                      // 0   <= <value> <= 10
@numeric-field:[(0 10]                     // 0   <  <value> <= 10
@numeric-field:[0 (10]                     // 0   <= <value> <  10
@numeric-field:[(0 (10]                    // 0   <  <value> <  10
@numeric-field:[1.5 (Inf]                  // 1.5 <= value
```

### 標籤比較
<a name="vector-search-query-expression-tag-compare"></a>

標籤比較運算子具有下列語法：

```
<tag-search> ::= '@' <tag-field-name> ':' '{' <tag> [ '|' <tag> ]* '}'
```

如果運算子中的任何標籤符合記錄標籤欄位中的任何標籤，則記錄會包含在結果集中。設計的欄位`<tag-field-name>`必須是類型為 宣告之索引的欄位`TAG`。標籤比較的範例如下：

```
@tag-field:{ atag }
@tag-field: { tag1 | tag2 }
```

### 布林值組合
<a name="vector-search-query-expression-boolean-combinations"></a>

您可以使用布林邏輯： 和/或 來組合數值或標籤運算子的結果集。括號可用來將運算子分組和/或變更評估順序。布林值邏輯運算子的語法為：

```
<expression> ::= <phrase> | <phrase> '|' <expression> | '(' <expression> ')'
<phrase> ::= <term> | <term> <phrase>
<term> ::= <range-search> | <tag-search> | '*'
```

合併為片語的多個術語是「和」。與管道 ('\$1') 結合的多個片語為「或」。

### 向量搜尋
<a name="vector-search-query-expression-vector-search"></a>

向量索引支援兩種不同的搜尋方法：最近的相鄰和範圍。最近的鄰搜尋會尋找索引中最接近所提供 （參考） 向量之向量的數字 K，這稱為「K」最近鄰的 KNN。KNN 搜尋的語法為：

```
<vector-knn-search> ::= <expression> '=>[KNN' <k> '@' <vector-field-name> '$' <parameter-name> <modifiers> ']'
<modifiers> ::= [ 'EF_RUNTIME' <integer> ] [ 'AS' <distance-field-name>]
```

向量 KNN 搜尋只會套用至滿足 的向量`<expression>`，其可以是上述定義之運算子的任意組合：萬用字元、範圍搜尋、標籤搜尋和/或布林值組合。
+ `<k>` 是整數，指定要傳回的最近鄰向量數量。
+ `<vector-field-name>` 必須指定 類型的宣告欄位`VECTOR`。
+ `<parameter-name>` 欄位指定 `FT.SEARCH`或 `FT.AGGREGATE`命令`PARAM`資料表的其中一個項目。此參數是距離運算的參考向量值。向量的值會以*小端 IEEE 754* 二進位格式編碼為`PARAM`值 （與 HASH 向量欄位的編碼相同）
+ 對於 HNSW 類型的向量索引，選用子`EF_RUNTIME`句可用來覆寫建立索引時所建立`EF_RUNTIME`參數的預設值。
+ 選用 `<distance-field-name>`會提供結果集的欄位名稱，以包含參考向量和定位索引鍵之間的計算距離。

範圍搜尋會尋找與參考向量在指定距離 （半徑） 內的所有向量。範圍搜尋的語法為：

```
<vector-range-search> ::= ‘@’ <vector-field-name> ‘:’ ‘[’ ‘VECTOR_RANGE’ ( <radius> | ‘$’ <radius-parameter> )  $<reference-vector-parameter> ‘]’ [ ‘=’ ‘>’ ‘{’ <modifiers> ‘}’ ] 
<modifiers> ::= <modifier> | <modifiers>, <modifier> 
<modifer> ::= [ ‘$yield_distance_as’ ‘:’ <distance-field-name> ] [ ‘$epsilon’ ‘:’ <epsilon-value> ]
```

其中：
+ `<vector-field-name>`是要搜尋的向量欄位名稱。
+ `<radius> or $<radius-parameter>` 是搜尋的數值距離限制。
+ `$<reference-vector-parameter> ` 是包含參考向量的 參數名稱。向量的值會以小端 IEEE 754 二進位格式編碼為 PARAM 值 （與 HASH 向量欄位的編碼相同）
+ 選用 `<distance-field-name>`會提供結果集的欄位名稱，以包含參考向量和每個索引鍵之間的計算距離。
+ 選用 可`<epsilon-value> `控制搜尋操作的邊界，`<radius> * (1.0 + <epsilon-value>) `會周遊距離內的向量，尋找候選結果。預設值為 .01。

## INFO 命令
<a name="vector-search-ft.info"></a>

向量搜尋使用幾個額外的統計資料和計數器區段來增強 Valkey 和 Redis OSS [INFO](https://valkey.io/commands/info/) 命令。擷取區段的請求`SEARCH`將擷取下列所有區段：

### `search_memory` 區段
<a name="vector-search-ft.info-search-memory"></a>


| 名稱 | 描述 | 
| --- | --- | 
| search\$1used\$1memory\$1bytes | 所有搜尋資料結構中耗用的記憶體位元組數 | 
| search\$1used\$1memory\$1human | 上述的人類可讀版本 | 

### `search_index_stats` 區段
<a name="vector-search-ft.info-search_index_stats"></a>


| 名稱 | 描述 | 
| --- | --- | 
| search\$1number\$1of\$1indexes | 建立的索引數量 | 
| search\$1num\$1fulltext\$1indexes | 所有索引中的非向量欄位數量 | 
| search\$1num\$1vector\$1indexes | 所有索引中的向量欄位數目 | 
| search\$1num\$1hash\$1indexes | HASH 類型索引鍵上的索引數量 | 
| search\$1num\$1json\$1indexes | JSON 類型索引鍵上的索引數量 | 
| search\$1total\$1indexed\$1keys | 所有索引中的索引鍵總數 | 
| search\$1total\$1indexed\$1vectors | 所有索引中的向量總數 | 
| search\$1total\$1indexed\$1hash\$1keys | 所有索引中 HASH 類型的索引鍵總數 | 
| search\$1total\$1indexed\$1json\$1keys | 所有索引中 tytpe JSON 的索引鍵總數 | 
| search\$1total\$1index\$1size | 所有索引使用的位元組 | 
| search\$1total\$1fulltext\$1index\$1size | 非向量索引結構使用的位元組 | 
| search\$1total\$1vector\$1index\$1size | 向量索引結構使用的位元組 | 
| search\$1max\$1index\$1lag\$1ms | 上次擷取批次更新期間的擷取延遲 | 

### `search_ingestion` 區段
<a name="vector-search-ft.info-search_ingestion"></a>


| 名稱 | 描述 | 
| --- | --- | 
| search\$1background\$1indexing\$1status | 擷取的狀態。 NO\$1ACTIVITY表示閒置。其他值表示擷取過程中有索引鍵。 | 
| search\$1ingestion\$1paused | 除了重新啟動之外，這應該一律為「否」。 | 

### `search_backfill` 區段
<a name="vector-search-ft.info-search_backfill"></a>

**注意**  
只有在回填目前正在進行中時，才會顯示本節中記錄的一些欄位。


| 名稱 | 描述 | 
| --- | --- | 
| search\$1num\$1active\$1backfills | 目前回填活動的數量 | 
| search\$1backfills\$1paused | 除非記憶體不足，否則這應該一律為「否」。 | 
| search\$1current\$1backfill\$1progress\$1percentage | 目前回填的完成百分比 (0-100) | 

### `search_query` 區段
<a name="vector-search-ft.info-search_query"></a>


| 名稱 | 描述 | 
| --- | --- | 
| search\$1num\$1active\$1queries | 目前進行中 FT.SEARCH和 FT.AGGREGATE命令的數量 | 

## 向量搜尋安全性
<a name="vector-search-security"></a>

命令和資料存取的 [ACL （存取控制清單）](https://valkey.io/topics/acl/) 安全機制都會擴展，以控制搜尋設施。完全支援個別搜尋命令的 ACL 控制。提供了新的 ACL 類別 `@search`，並更新了許多現有類別 (`@fast`、`@write`、 `@read`等），以包含新的命令。搜尋命令不會修改金鑰資料，這表示會保留用於寫入存取的現有 ACL 機器。索引的存在不會修改 HASH 和 JSON 操作的存取規則；一般金鑰層級存取控制仍會套用至這些命令。

具有 索引的搜尋命令也會透過 ACL 控制其存取。存取檢查是在整個索引層級執行，而不是在每個金鑰層級。這表示只有在該使用者具有存取該索引之金鑰空間字首清單中所有可能金鑰的許可時，才會將索引的存取權授予使用者。換句話說，索引的實際內容不會控制存取。相反地，它是 索引的理論內容，由用於安全檢查的字首清單所定義。建立使用者對金鑰具有讀取和/或寫入存取權，但無法存取包含該金鑰的索引的情況很容易。請注意，建立或使用索引只需要對 金鑰空間的讀取存取權 – 不會考慮是否存在寫入存取權。

如需搭配 MemoryDB 使用 ACLs 的詳細資訊，請參閱[使用存取控制清單 (ACLs) 驗證使用者](https://docs.aws.amazon.com/memorydb/latest/devguide/clusters.acls.html)。

# 使用案例
<a name="vector-search-examples"></a>

以下是向量搜尋的使用案例。

## 檢索增強生成 (RAG)
<a name="vector-search-examples-retrieval-augmented-generation"></a>

擷取增強生成 (RAG) 利用向量搜尋，從大型資料組合擷取相關段落，以增強大型語言模型 (LLM)。具體而言，編碼器會將輸入內容和搜尋查詢嵌入向量，然後使用近似接近的鄰近搜尋來尋找類似語義的段落。這些擷取的段落會與原始內容串連，以提供其他相關資訊給 LLM，以傳回更準確的回應給使用者。

![\[擷取增強產生流程的圖形\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/RAG.png)


## 持久的語意快取
<a name="vector-search-examples-durable-semantic-cache"></a>

語意快取是一種程序，可透過儲存來自 FM 的先前結果來降低運算成本。透過重複使用先前推論的先前結果，而不是重新運算，語意快取可減少透過 FMs 推論期間所需的運算量。MemoryDB 可啟用持久的語意快取，避免過去推論的資料遺失。這可讓您的生成式 AI 應用程式在單一位數毫秒內回應先前語意相似問題的答案，同時避免不必要的 LLM 推論來降低成本。

![\[顯示基礎模型程序的工作流程圖。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/FM.png)

+ **語意搜尋命中** – 如果客戶的查詢根據與先前問題所定義的相似性分數在語義上類似，FM 緩衝區記憶體 (MemoryDB) 會傳回步驟 4 中先前問題的答案，而不會透過步驟 3 呼叫 FM。這將避免基礎模型 (FM) 延遲和產生的成本，為客戶提供更快的體驗。
+ **語意搜尋遺漏** – 如果客戶的查詢根據與先前查詢的定義相似度分數在語義上不相似，則客戶會在步驟 3a 中呼叫 FM 以向客戶傳遞回應。然後，從 FM 產生的回應將作為向量儲存到 MemoryDB 以供未來查詢 （步驟 3b)，以將語意相似問題的 FM 成本降至最低。在此流程中，不會叫用步驟 4，因為原始查詢沒有類似語義的問題。

## 詐騙偵測
<a name="vector-search-examples-fraud-detection"></a>

詐騙偵測是一種異常偵測形式，代表有效的交易做為向量，同時比較新交易淨額的向量表示法。當這些新交易與代表有效交易資料的向量具有低相似性時，就會偵測到詐騙。這可透過建模正常行為來偵測詐騙，而不是嘗試預測每個可能的詐騙執行個體。MemoryDB 可讓組織在高輸送量期間執行此操作，並將誤報和單位數毫秒延遲降至最低。

![\[顯示詐騙偵測程序的工作流程圖。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/fraud-detection.png)


## 其他使用案例
<a name="vector-search-engines"></a>
+ **建議引擎**可以透過將項目表示為向量來尋找類似的產品或內容。透過分析屬性和模式來建立向量。根據使用者模式和屬性，可以透過尋找已與使用者正面對齊的最類似向量，向使用者建議新的看不見項目。
+ **文件搜尋引擎**將文字文件表示為數字的密集向量，擷取語意意義。在搜尋時間，引擎會將搜尋查詢轉換為向量，並使用近似最接近的鄰近搜尋來尋找具有最相似向量的文件。此向量相似性方法允許根據意義比對文件，而不只是比對關鍵字。

# 向量搜尋功能和限制
<a name="vector-search-limits"></a>

## 向量搜尋可用性
<a name="vector-search-availability"></a>

R6g, R7g 和 T4g 節點類型支援啟用向量搜尋的 MemoryDB 組態，並且可在提供 MemoryDB 的所有 AWS 區域中使用。

現有的叢集無法修改以啟用搜尋。不過，啟用搜尋的叢集可以從停用搜尋的叢集快照建立。

## 參數限制
<a name="parameter-restrictions"></a>

下表顯示各種向量搜尋項目的限制：


| 項目 | 最大值 | 
| --- | --- | 
| 向量中的維度數量 | 32768 | 
| 可建立的索引數量 | 10 | 
| 索引中的欄位數目 | 50 | 
| FT.SEARCH 和 FT.AGGREGATE TIMEOUT 子句 （毫秒） | 10000 | 
| FT.AGGREGATE 命令中的管道階段數量 | 32 | 
| FT.AGGREGATE LOAD 子句中的欄位數目 | 1024 | 
| FT.AGGREGATE GROUPBY 子句中的欄位數目 | 16 | 
| FT.AGGREGATE SORTBY 子句中的欄位數目 | 16 | 
| FT.AGGREGATE PARAM 子句中的參數數目 | 32 | 
| HNSW M 參數 | 512 | 
| HNSW EF\$1CONSTRUCTION 參數 | 4096 | 
| HNSW EF\$1RUNTIME 參數 | 4096 | 

## 擴展限制
<a name="scaling-restrictions"></a>

MemoryDB 的向量搜尋目前僅限於單一碎片，不支援水平擴展。向量搜尋支援垂直和複本擴展。

## 操作限制
<a name="operational-restrictions"></a>

**索引持久性和回填**

向量搜尋功能會保留索引的定義，以及索引的內容。這表示在任何導致節點啟動或重新啟動的操作請求或事件期間，索引定義和內容會從最新的快照還原，而任何待定交易都會從多可用區域交易日誌中讀取。不需要使用者動作即可啟動此動作。一旦資料還原，重建就會以回填操作的形式執行。這在功能上等同於系統自動為每個定義的索引執行 [FT.CREATE](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.create.html) 命令。請注意，一旦還原資料，但可能在索引回填完成之前，節點就可供應用程式操作使用，這表示應用程式會再次看到回填 （例如，使用回填索引的搜尋命令可能會遭拒）。如需回填的詳細資訊，請參閱 [向量搜尋概觀索引和 Valkey 和 Redis OSS 金鑰空間](vector-search-overview.md#vector-search-indexes-keyspaces)。

索引回填的完成不會在主要和複本之間同步。應用程式可能會意外看到這種缺乏同步的情況，因此建議應用程式在啟動搜尋操作之前，先驗證主要和所有複本上的回填完成。

## 快照匯入/匯出和即時遷移
<a name="snapshot-restrictions"></a>

RDB 檔案中是否存在搜尋索引會限制該資料的相容可傳輸性。只有另一個啟用 MemoryDB 向量的叢集才能了解 MemoryDB 向量搜尋功能定義的向量索引格式。此外，預覽叢集的 RDB 檔案可由 MemoryDB 叢集的 GA 版本匯入，這會在載入 RDB 檔案時重建索引內容。

不過，不包含索引的 RDB 檔案不會以此方式受到限制。因此，在匯出之前刪除索引，可將預覽叢集內的資料匯出至非預覽叢集。

## 記憶體使用量
<a name="memory-consumption"></a>

 記憶體耗用取決於向量數量、維度數量、M 值和非向量資料數量，例如與向量相關聯的中繼資料或存放在執行個體中的其他資料。

所需的總記憶體是實際向量資料所需的空間，以及向量索引所需的空間的組合。向量資料所需的空間是透過測量在 HASH 或 JSON 資料結構中存放向量所需的實際容量，以及對最接近記憶體板的額外負荷來計算，以獲得最佳記憶體配置。每個向量索引使用對存放在這些資料結構中的向量資料的參考，並使用有效的記憶體最佳化來移除索引中向量資料的任何重複副本。

向量數量取決於您決定將資料表示為向量的方式。例如，您可以選擇將單一文件表示為數個區塊，其中每個區塊代表向量。或者，您可以選擇將整個文件表示為單一向量。

向量的維度取決於您選擇的內嵌模型。例如，如果您選擇使用 [AWS Titan](https://aws.amazon.com/bedrock/titan/) 內嵌模型，則維度數目將為 1536。

M 參數代表索引建構期間為每個新元素建立的雙向連結數目。MemoryDB 將此值預設為 16；不過，您可以覆寫此值。較高的 M 參數較適用於高維度和/或高回收需求，而低 M 參數較適用於低維度和/或低回收需求。隨著索引變大，M 值會增加記憶體的消耗量，進而增加記憶體消耗量。

在主控台體驗中，MemoryDB 可根據向量工作負載的特性，在叢集設定下勾選啟用向量搜尋後，提供簡單的方式來選擇正確的執行個體類型。

![\[AWS 主控台中的向量搜尋叢集設定。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/vector-search-cluster-settings-console.png)




**範例工作負載**

客戶想要建置以內部財務文件為基礎的語意搜尋引擎。他們目前擁有 1M份財務文件，這些文件使用具有 1536 個維度的 titan 內嵌模型，每個文件分成 10 個向量，而且沒有非向量資料。客戶決定使用預設值 16 做為 M 參數。
+ 向量：1 M \$1 10 區塊 = 10M 向量
+ 維度：1536
+ 非向量資料 (GB)：0 GB
+ M 參數：16

透過此資料，客戶可以按一下主控台中的使用向量計算器按鈕，根據其參數取得建議的執行個體類型：

![\[根據計算器的輸入，向量計算器建議的節點類型。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/vector-calc1.png)


![\[輸入值的向量計算器。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/vector-calc2.png)


在此範例中，向量計算器會尋找最小的 [MemoryDB r7g 節點類型](https://aws.amazon.com/memorydb/pricing/)，其可以根據提供的參數存放向量所需的記憶體。請注意，這是近似值，您應該測試執行個體類型，以確保其符合您的需求。



根據上述計算方法和範例工作負載中的參數，此向量資料需要 104.9 GB 才能存放資料和單一索引。在此情況下，建議使用`db.r7g.4xlarge`執行個體類型，因為它有 105.81 GB 的可用記憶體。下一個最小節點類型太小，無法容納向量工作負載。

由於每個向量索引都使用所存放向量資料的參考，而且不會在向量索引中建立向量資料的額外副本，因此索引也會耗用相對較少的空間。這在建立多個索引時非常有用，在已刪除部分向量資料且重建 HNSW 圖形的情況下，也有助於為高品質向量搜尋結果建立最佳節點連線。

## 回填期間記憶體不足
<a name="out-of-memory-backfill"></a>

與 Valkey 和 Redis OSS 寫入操作類似，索引回填會out-of-memory的限制。如果在回填進行時填滿引擎記憶體，則會暫停所有回填。如果記憶體可用，則會繼續回填程序。當回填因記憶體不足而暫停時，也可以刪除和編製索引。

## 交易
<a name="transactions"></a>

命令 `FT.CREATE`、`FT.DROPINDEX`、`FT.ALIASDEL`、 `FT.ALIASADD`和 `FT.ALIASUPDATE`無法在交易內容中執行，即不在 MULTI/EXEC 區塊內或在 LUA 或 FUNCTION 指令碼內。

# 建立啟用向量搜尋的叢集
<a name="vector-search-cluster"></a>

您可以使用 AWS 管理主控台或 建立已啟用向量搜尋的叢集 AWS Command Line Interface。根據方法，必須啟用啟用向量搜尋的考量。

## 使用 AWS 管理主控台
<a name="vector-search-console"></a>

若要在主控台中建立啟用向量搜尋的叢集，您需要在**叢集**設定下啟用向量搜尋。向量搜尋適用於單一碎片組態中的 MemoryDB 7.1 版。

![\[檢視已勾選「啟用向量搜尋」選項的叢集設定，可提供特定版本和組態支援的相關資訊。\]](http://docs.aws.amazon.com/zh_tw/memorydb/latest/devguide/images/vs-2.png)


如需搭配 使用向量搜尋的詳細資訊 AWS 管理主控台，請參閱 [建立叢集 （主控台）](getting-started.md#clusters.createclusters.viewdetails.cluster)。

## 使用 AWS Command Line Interface
<a name="vector-search-cli"></a>

若要建立啟用向量搜尋的 MemoryDB 叢集，您可以透過傳遞不可變參數群組來啟用向量搜尋功能`default.memorydb-redis7.search`，來使用 MemoryDB [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/memorydb/create-cluster.html) 命令。

```
aws memorydb create-cluster \
  --cluster-name <value> \
  --node-type <value> \
  --engine redis \
  --engine-version 7.1 \
  --num-shards 1 \
  --acl-name <value> \
  --parameter-group-name default.memorydb-redis7.search
```

您也可以選擇性地建立新的參數群組，以啟用向量搜尋，如下列範例所示。您可以在[此處](parametergroups.management.md)進一步了解參數群組。

```
aws memorydb create-parameter-group \
  --parameter-group-name my-search-parameter-group \
  --family memorydb_redis7
```

接著，在新建立的參數群組中，將啟用搜尋的參數更新為是。

```
aws memorydb update-parameter-group \
  --parameter-group-name my-search-parameter-group \
  --parameter-name-values "ParameterName=search-enabled,ParameterValue=yes"
```

您現在可以使用此自訂參數群組，而非預設參數群組，在 MemoryDB 叢集上啟用向量搜尋。

# 向量搜尋命令
<a name="vector-search-commands"></a>

以下是向量搜尋支援的命令清單。

**Topics**
+ [FT.CREATE](vector-search-commands-ft.create.md)
+ [FT.SEARCH](vector-search-commands-ft.search.md)
+ [FT.AGGREGATE](vector-search-commands-ft.aggregate.md)
+ [FT.DROPINDEX](vector-search-commands-ft.dropindex.md)
+ [FT.INFO](vector-search-commands-ft.info.md)
+ [FT.\$1LIST](vector-search-commands-ft.list.md)
+ [FT.ALIASADD](vector-search-commands-ft.aliasadd.md)
+ [FT.ALIASDEL](vector-search-commands-ft.aliasdel.md)
+ [FT.ALIASUPDATE](vector-search-commands-ft.aliasupdate.md)
+ [FT.\$1ALIASLIST](vector-search-commands-ft.aliaslist.md)
+ [FT.PROFILE](vector-search-commands-ft.profile.md)
+ [FT.EXPLAIN](vector-search-commands-ft.explain.md)
+ [FT.EXPLAINCLI](vector-search-commands-ft.explain-cli.md)

# 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]}]"
```

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

使用提供的查詢表達式來尋找索引內的索引鍵。一旦找到，就可以傳回這些索引鍵內索引欄位的計數和/或內容。如需詳細資訊，請參閱[向量搜尋查詢表達](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html#vector-search-query-expression)式。

若要建立資料以用於這些範例，請參閱 [FT.CREATE ](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.create.html)命令。

**語法**

```
FT.SEARCH <index-name> <query>
[RETURN <token_count> (<field-identifier> [AS <alias>])+]
[TIMEOUT timeout] 
[PARAMS <count> <name> <value> [<name> <value>]]
[LIMIT <offset> <count>]
[COUNT]
```
+ RETURN：此子句可識別傳回的金鑰欄位。每個欄位上的選用 AS 子句會覆寫結果中的欄位名稱。只能指定已為此索引宣告的欄位。
+ LIMIT：<offset> <count>：此子句提供分頁功能，其中只會傳回滿足位移和計數值的索引鍵。如果省略此子句，則預設為「LIMIT 0 10」，即最多只會傳回 10 個金鑰。
+ PARAMS：金鑰值對數量的兩倍。可以在查詢表達式中參考參數鍵/值對。如需詳細資訊，請參閱[向量搜尋查詢表達](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-overview.html#vector-search-query-expression)式。
+ COUNT：此子句禁止傳回索引鍵的內容，只會傳回索引鍵的數量。這是「LIMIT 0 0」的別名。

**傳回**

傳回陣列或錯誤回覆。
+ 如果操作成功完成，則會傳回 陣列。第一個元素是符合查詢的金鑰總數。其餘元素是金鑰名稱和欄位清單的配對。欄位清單是包含欄位名稱和值對的另一個陣列。
+ 如果索引正在進行回填，命令會立即傳回錯誤回覆。
+ 如果達到逾時，命令會傳回錯誤回覆。

**範例：執行一些搜尋**

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

**雜湊搜尋**

```
FT.SEARCH hash_idx1 "*=>[KNN 2 @VEC $query_vec]" PARAMS 2 query_vec "\x00\x00\x00\x00\x00\x00\x00\x00" DIALECT 2
1) (integer) 2
2) "hash:0"
3) 1) "__VEC_score"
   2) "0"
   3) "vec"
   4) "\x00\x00\x00\x00\x00\x00\x00\x00"
4) "hash:1"
5) 1) "__VEC_score"
   2) "1"
   3) "vec"
   4) "\x00\x00\x00\x00\x00\x00\x80\xbf"
```

這會產生兩個結果，依其分數排序，這是與查詢向量的距離 （輸入為十六進位）。

**JSON 搜尋**

```
FT.SEARCH json_idx1 "*=>[KNN 2 @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) 2
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]}]"
```

這會產生兩個最接近的結果，依其分數排序，並請注意，JSON 向量值會轉換為浮點數，而查詢向量仍然是向量資料。另請注意，由於 `KNN` 參數為 2，因此只有兩個結果。較大的值將傳回更多結果：

```
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]}]"
```

# FT.AGGREGATE
<a name="vector-search-commands-ft.aggregate"></a>

FT.SEARCH 命令的超集，允許對查詢表達式選取的索引鍵進行大量額外處理。

**語法**

```
FT.AGGREGATE index query
  [LOAD * | [count field [field ...]]]
  [TIMEOUT timeout]
  [PARAMS count name value [name value ...]]
  [FILTER expression]
  [LIMIT offset num]  
  [GROUPBY count property [property ...] [REDUCE function count arg [arg ...] [AS name] [REDUCE function count arg [arg ...] [AS name] ...]] ...]] 
  [SORTBY count [ property ASC | DESC [property ASC | DESC ...]] [MAX num]] 
  [APPLY expression AS name]
```
+ FILTER、LIMIT、GROUPBY、SORTBY 和 Apply 子句可以任意順序重複多次，並自由混合。它們會按照指定的順序套用，其中有一個子句的輸出饋送下一個子句的輸入。
+ 在上述語法中，「屬性」是在此索引的 [FT.CREATE](https://docs.aws.amazon.com/memorydb/latest/devguide/vector-search-commands-ft.create.html) 命令中宣告的欄位，或先前套用子句或 REDUCE 函數的輸出。
+ LOAD 子句僅限於載入已在索引中宣告的欄位。「LOAD \$1」將載入索引中宣告的所有欄位。
+ 支援下列減少程式函數：COUNT、COUNT\$1DISTINCTISH、SUM、MIN、MAX、AVG、STDDEV、QUANTILE、TOLIST、FIRST\$1VALUE 和 RANDOM\$1SAMPLE。如需詳細資訊，請參閱[彙總](https://redis.io/docs/interact/search-and-query/search/aggregations/)
+ LIMIT <offset> <count>：保留從 <offset> 開始並繼續最多 <count> 的記錄，會捨棄所有其他記錄。
+ PARAMS：金鑰值對數量的兩倍。可以在查詢表達式中參考參數鍵/值對。

**傳回**

傳回陣列或錯誤回覆。
+ 如果操作成功完成，則會傳回 陣列。第一個元素是沒有特定意義的整數 （應予以忽略）。其餘元素是最後一個階段的結果輸出。每個元素都是欄位名稱和值對的陣列。
+ 如果索引正在進行回填，命令會立即傳回錯誤回覆。
+ 如果達到逾時，命令會傳回錯誤回覆。

# FT.DROPINDEX
<a name="vector-search-commands-ft.dropindex"></a>

捨棄索引。索引定義和相關聯的內容會遭到刪除。金鑰不受影響。

**語法**

```
FT.DROPINDEX <index-name>
```

**傳回**

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

# FT.INFO
<a name="vector-search-commands-ft.info"></a>

**語法**

```
FT.INFO <index-name>
```

FT.INFO 頁面的輸出是索引鍵值對的陣列，如下表所述：


| 金錀 | 值類型 | Description | 
| --- | --- | --- | 
| index\$1name | string | 索引的名稱 | 
| creation\$1timestamp | integer | 建立時間的 Unix 樣式時間戳記 | 
| key\$1type | string | HASH 或 JSON | 
| key\$1prefixes | 字串陣列 | 此索引的金鑰字首 | 
| fields | 欄位資訊的陣列 | 此索引的欄位 | 
| space\$1usage | integer | 此索引使用的記憶體位元組 | 
| fullext\$1space\$1usage | integer | 非向量欄位使用的記憶體位元組 | 
| vector\$1space\$1usage | integer | 向量欄位使用的記憶體位元組 | 
| num\$1docs | integer | 索引中目前包含的索引鍵數量 | 
| num\$1indexed\$1vectors | integer | 索引中目前包含的向量數量 | 
| current\$1lag | integer | 最近擷取延遲 (milliSeconds) | 
| backfill\$1status | string | 其中之一：已完成、InProgres、已暫停或失敗  | 

下表說明每個欄位的資訊：


| 金錀 | 值類型 | Description | 
| --- | --- | --- | 
| identifier | string | 欄位的名稱 | 
| field\$1name | string | 雜湊成員名稱或 JSON 路徑 | 
| type | string | 其中之一：數值、標籤、文字或向量 | 
| option | string | ignore | 

如果 欄位類型為 Vector，則會根據演算法顯示其他資訊。

對於 HNSW 演算法：


| 金錀 | 值類型 | Description | 
| --- | --- | --- | 
| 演算法 | string | HNSW | 
| data\$1type | string | FLOAT32 | 
| distance\$1metric | string | 其中之一：L2、IP 或 Cosine | 
| initial\$1capacity | integer | 向量欄位索引的初始大小 | 
| current\$1capacity | integer | 向量欄位索引的目前大小 | 
| maximum\$1edges | integer | 建立時的 M 參數 | 
| ef\$1construction | integer | 建立時的 EF\$1CONSTRUCTION 參數 | 
| ef\$1runtime | integer | 建立時的 EF\$1RUNTIME 參數 | 

對於 FLAT 演算法：


| 金錀 | 值類型 | Description | 
| --- | --- | --- | 
| 演算法 | string | FLAT | 
| data\$1type | string | FLOAT32 | 
| distance\$1metric | string | 其中之一：L2、IP 或 Cosine | 
| initial\$1capacity | integer | 向量欄位索引的初始大小 | 
| current\$1capacity | integer | 向量欄位索引的目前大小 | 

# FT.\$1LIST
<a name="vector-search-commands-ft.list"></a>

列出所有索引。

**語法**

```
FT._LIST 
```

**傳回**

傳回索引名稱的陣列

# FT.ALIASADD
<a name="vector-search-commands-ft.aliasadd"></a>

新增索引的別名。新的別名名稱可在需要索引名稱的任何位置使用。

**語法**

```
FT.ALIASADD <alias> <index-name> 
```

**傳回**

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

# FT.ALIASDEL
<a name="vector-search-commands-ft.aliasdel"></a>

刪除索引的現有別名。

**語法**

```
FT.ALIASDEL <alias>
```

**傳回**

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

# FT.ALIASUPDATE
<a name="vector-search-commands-ft.aliasupdate"></a>

更新現有的別名以指向不同的實體索引。此命令只會影響未來對別名的參考。目前進行中的操作 (FT.SEARCH、FT.AGGREGATE) 不受此命令影響。

**語法**

```
FT.ALIASUPDATE <alias> <index>
```

**傳回**

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

# FT.\$1ALIASLIST
<a name="vector-search-commands-ft.aliaslist"></a>

列出索引別名。

**語法**

```
FT._ALIASLIST
```

**傳回**

傳回目前別名數量大小的陣列。陣列的每個元素都是別名索引對。

# FT.PROFILE
<a name="vector-search-commands-ft.profile"></a>

執行查詢並傳回有關該查詢的設定檔資訊。

**語法**

```
FT.PROFILE 

<index>
SEARCH | AGGREGATE 
[LIMITED]
QUERY <query ....>
```

**傳回**

雙元素陣列。第一個元素是分析的 `FT.SEARCH`或 `FT.AGGREGATE`命令的結果。第二個元素是效能和分析資訊的陣列。

# FT.EXPLAIN
<a name="vector-search-commands-ft.explain"></a>

剖析查詢並傳回如何剖析該查詢的資訊。

**語法**

```
FT.EXPLAIN <index> <query>
```

**傳回**

包含剖析結果的字串。

# FT.EXPLAINCLI
<a name="vector-search-commands-ft.explain-cli"></a>

與 FT.EXPLAIN 命令相同，但結果會以對 redis-cli 更有用的不同格式顯示。

**語法**

```
FT.EXPLAINCLI <index> <query>
```

**傳回**

包含剖析結果的字串。