1. 數值字段(NUMERIC)
-
用途:存儲整數或浮點數,可進行范圍查詢與排序。
-
選項:
SORTABLE
:允許用SORTBY
排序NOINDEX
:不參與索引,僅供返回
定義語法
FT.CREATE idx ON HASH PREFIX 1 prod:
SCHEMAprice NUMERIC [SORTABLE] [NOINDEX]
查詢示例
# 查找 price 在 200 到 300 之間的文檔
FT.SEARCH idx "@price:[200 300]"# 開區間
FT.SEARCH idx "@price:[(100 (200]"# 上下界省略表示 ±∞
FT.SEARCH idx "@price:[500 +inf]"
2. 地理坐標字段(GEO)
-
用途:存儲經緯度(lon,lat),支持半徑范圍檢索。
-
選項:
SORTABLE
:允許排序NOINDEX
:僅供返回,不參與檢索
定義語法
FT.CREATE idx ON HASH PREFIX 1 city:
SCHEMAcoords GEO [SORTABLE] [NOINDEX]
查詢示例
# 查找距離 (2.34,48.86) 1000 公里內的城市
FT.SEARCH idx "@coords:[2.34 48.86 1000 km]"
更多地理形狀(Geoshape)請見下節。
3. 地理形狀字段(GEOSHAPE)
-
用途:存儲點、線、面等幾何體,支持點在形狀內、形狀相交等高級空間查詢。
-
坐標類型:
SPHERICAL
(默認):地球球面坐標FLAT
:平面笛卡爾坐標
-
選項:
NOINDEX
:僅供返回
定義語法
FT.CREATE idx ON HASH PREFIX 1 region:
SCHEMAarea GEOSHAPE [FLAT|SPHERICAL] [NOINDEX]
查詢示例
# 找出包含點 (2,2) 的幾何體(需 DIALECT 2)
FT.SEARCH idx "(@area:[CONTAINS $pt])" PARAMS 2 pt "POINT (2 2)" RETURN 1 nameDIALECT 2
4. 向量字段(VECTOR)
-
用途:存儲機器學習生成的浮點向量,支持 KNN 相似度檢索。
-
算法:
FLAT
:暴力搜索HNSW
:小世界圖
-
必選屬性:
TYPE
:數據類型,如FLOAT32
DIM
:向量維度DISTANCE_METRIC
:L2
、IP
(內積)等
-
可選屬性(視算法而定):如
M
,EF_CONSTRUCTION
(HNSW)等
定義語法
FT.CREATE idx ON HASH PREFIX 1 vec:
SCHEMAembedding VECTOR FLAT 6TYPE FLOAT32 DIM 128 DISTANCE_METRIC L2
- 這里
6
表示后面跟了 6 個屬性:TYPE
、FLOAT32
、DIM
、128
、DISTANCE_METRIC
、L2
。
5. 標簽字段(TAG)
-
用途:存儲有限離散值,如類別、狀態碼等,按完整值匹配,無分詞。
-
選項:
SEPARATOR <char>
:自定義多值分隔符(默認,
)CASESENSITIVE
:大小寫敏感(默認不敏感)SORTABLE
:支持排序NOINDEX
:不參與索引
定義語法
FT.CREATE idx ON HASH PREFIX 1 doc:
SCHEMAtags TAG [SEPARATOR "|" ] [CASESENSITIVE] [SORTABLE]
查詢示例
# 查找包含標簽 blue 的文檔
FT.SEARCH idx "@tags:{blue}"
6. 文本字段(TEXT)
-
用途:全文檢索,分詞、詞干提取,支持權重與排序。
-
選項:
WEIGHT <float>
:字段相關度權重(默認 1.0)NOSTEM
:關閉詞干提取PHONETIC <matcher>
:啟用雙音素搜索(dm:en
等)SORTABLE
:支持排序NOINDEX
:不參與索引,僅供返回WITHSUFFIXTRIE
:為后綴/通配查詢構建后綴樹
定義語法
FT.CREATE idx ON HASH PREFIX 1 blog:
SCHEMAtitle TEXT [WEIGHT 2.0] [SORTABLE]content TEXT NOSTEMemail TEXT PHONETIC dm:en
查詢示例
# 任意文本字段中搜索 wizard
FT.SEARCH idx "wizard"# 僅在 title 搜索 dogs
FT.SEARCH idx "@title:dogs"
7. Unicode 注意事項
- RediSearch 僅支持 BMP(U+0000–U+FFFF)字符;超出此范圍的字符(如部分 Emoji)不能用于前綴/后綴/通配或模糊查詢。
- 示例:對
😀😁🙂
等字符的前綴查詢無效。
八、最佳實踐
- 字段選型:根據業務場景選擇合適類型,避免全部用 TEXT 導致索引膨脹。
- 索引與存儲分離:對只需返回但不檢索的字段使用
NOINDEX
,節省內存。 - 排序字段:僅對必要字段加
SORTABLE
,過多 sortable 將增加內存開銷。 - 權重調整:對標題或關鍵字段使用
WEIGHT
提升相關度。 - 合理分隔:TAG 多值字段盡量指定
SEPARATOR
,避免與默認逗號沖突。
通過以上示例與說明,你已掌握 RediSearch 的所有字段類型及其關鍵配置選項。結合業務需求和數據特點,靈活調整 Schema,既可實現強大的搜索功能,又能最大限度地優化內存與查詢性能。