本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
FT.SEARCH
執行指定索引的搜尋。系統會傳回符合查詢表達式的索引鍵。
FT.SEARCH <index-name> <query> [NOCONTENT] [RETURN <token_count> (<field-identifier> [AS <alias>])+] [TIMEOUT timeout] [PARAMS <count> <name> <value> [<name> <value>]] [LIMIT <offset> <count>]
<index> (必要):您要查詢的此索引名稱。
<query> (必要):查詢字串,請參閱下方以取得詳細資訊。
NOCONTENT (選用):存在時,只會傳回產生的金鑰名稱,不會包含金鑰值。
逾時 <逾時> (選用):可讓您設定搜尋命令的逾時值。這必須是以毫秒為單位的整數。
PARAMS <count> <name1> <value1> <name2> <value2> ... (選用):
count是引數數目,即值名稱對數目的兩倍。如需用量詳細資訊,請參閱查詢字串。RETURN <count> <field1> <field2> ... (選用):count 是要傳回的欄位數目。指定您要從文件中擷取的欄位,以及傳回值的任何別名。根據預設,除非設定 NOCONTENT 選項,否則所有欄位都會傳回,在這種情況下不會傳回任何欄位。如果計數設定為 0,則其行為與 NOCONTENT 相同。
LIMIT:<offset> <count>:可讓您選擇結果的一部分。第一個 <offset> 金鑰會略過,且最多只會包含 <count> 個金鑰。預設值為 LIMIT 0 10,最多傳回 10 個金鑰。
PARAMS:金鑰值對數量的兩倍。可以在查詢表達式中參考參數鍵/值對。如需詳細資訊,請參閱向量搜尋查詢表達式。
DIALECT:<dialect> (選用):指定您的方言。唯一支援的方言是 2。
回應
如果成功或發生錯誤,命令會傳回陣列。
成功時,回應陣列中的第一個項目代表相符金鑰的計數,後面接著每個相符金鑰的一個陣列項目。請注意,如果指定 LIMIT選項,它只會控制傳回的金鑰數目,而且不會影響第一個項目的值。
指定 NOCONTENT 時,回應中的每個項目僅包含相符的金鑰名稱。否則,每個項目都會包含相符的金鑰名稱,後面接著傳回欄位的陣列。索引鍵的結果欄位由一組名稱/值對組成。名字/值對適用於計算的距離。此對的名稱是從以「__」開頭的向量欄位名稱建構,並以「_score」附加,且值為計算的距離。剩餘的名稱/值對是 RETURN子句所控制之金鑰的成員和值。
查詢字串符合此語法:
<filtering>=>[ KNN <K> @<vector_field_name> $<vector_parameter_name> <query-modifiers> ]
其中:
<filtering>:是 * 或篩選條件表達式。* 表示沒有篩選,因此會搜尋索引中的所有向量。您可以提供篩選條件表達式來指定要搜尋的向量子集。
<vector_field_name>:指定索引內向量欄位的名稱。
<K>:要傳回的最近鄰向量數目。
<vector_parameter_name>:其對應值提供 KNN 演算法查詢向量的 PARAM 名稱。請注意,此參數必須以小端數格式編碼為 32 位元 IEEE 754 二進位浮點。
<query-modifiers>:(選用) 修改此特定 KNN 搜尋的關鍵字/值對清單。目前支援兩個關鍵字:
EF_RUNTIME:此關鍵字隨附整數值,可覆寫建立索引時指定的 EF_RUNTIME 預設值。
AS:此關鍵字會伴隨字串值,成為結果中分數欄位的名稱,覆寫預設分數欄位名稱產生演算法。
篩選條件表達式
篩選條件表達式建構為包含在括號中的標籤和數值搜尋運算子的邏輯組合。
標籤
標籤搜尋運算子是以一或多個以 | 字元分隔的字串指定。如果指定的欄位包含任何一個指定的字串,則金鑰將滿足標籤搜尋運算子。
@<field_name>:{<tag>} or @<field_name>:{<tag1> | <tag2>} or @<field_name>:{<tag1> | <tag2> | ...}
例如,下列查詢會傳回藍色或黑色或綠色的文件。
@color:{blue | black | green}
另一個範例是,下列查詢會傳回包含 "hello world" 或 "hello universe" 的文件。
@description:{hello world | hello universe}
數值範圍
數值範圍運算子允許篩選查詢,只傳回指定開始和結束值之間的值。支援包含和獨佔範圍查詢。對於簡單的關聯式比較,+inf、-inf 可以與範圍查詢搭配使用。範圍搜尋運算子的語法為:
@<field_name>:[ [(] <bound> [(] <bound>]
...其中 <bound> 是數字或 +inf 或 -inf。沒有前置開放剖析的邊界是包含的,而具有前置開放剖析的邊界是排斥的。
使用下表做為將數學表達式映射至篩選查詢的指南:
min <= field <= max @field:[min max] min < field <= max @field:[(min max] min <= field < max @field:[min (max] min < field < max @field:[(min (max] field >= min @field:[min +inf] field > min @field:[(min +inf] field <= max @field:[-inf max] field < max @field:[-inf (max] field == val @field:[val val]
邏輯運算子
多個標籤和數值搜尋運算子可用來建構使用邏輯運算子的複雜查詢。
邏輯 AND
若要設定邏輯 AND,請在述詞之間使用空格。例如:
query1 query2 query3
邏輯 OR
若要設定邏輯 OR,請在述詞之間使用空格。例如:
query1 | query2 | query3
邏輯否定
任何查詢都可以在每次查詢之前加上 - 字元來否定。負查詢會傳回不符合查詢的所有項目。這也包含沒有 欄位的金鑰。
例如,@genre:{comedy} 上的負面查詢會傳回所有非喜劇的書籍,以及所有沒有類型欄位的書籍。
下列查詢將傳回 2015 年至 2024 年之間未發佈或沒有年份欄位的所有「comedy」類型的書籍:@genre:【comedy】 -@year:【2015 2024】
運算子優先順序
一般運算子優先順序規則適用,即邏輯 NEGATE 是最高優先順序,後面接著邏輯 AND,然後是具有最低優先順序的邏輯 OR。括號可用來覆寫預設優先順序規則。
合併邏輯運算子的範例
邏輯運算子可以合併以形成複雜的篩選條件表達式。
下列查詢將傳回 2015 年至 2024 年間發佈的「comedy」或「horror」類型 (AND) 的所有書籍: @genre:[comedy|horror] @year:[2015 2024]
下列查詢將傳回 2015 年至 2024 年間發佈的「comedy」或「horror」類型 (OR) 的所有書籍: @genre:[comedy|horror] | @year:[2015 2024]
下列查詢將傳回 2015 年至 2024 年之間發佈的所有沒有類型欄位,或類型欄位不等於 "comedy" 的書籍: -@genre:[comedy] @year:[2015 2024]