

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

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