字段和类型选项
可用的字段类型和选项。
Redis Stack 提供各种字段类型,允许您在索引中存储和搜索不同类型的数据。本页面解释了可用的字段类型、它们的特性以及如何有效地使用它们。
数字字段
数值字段用于存储非文本的可计数值。它们可以保存整数或浮点值。数值字段是可排序的,这意味着您可以执行基于范围的查询并根据特定的数值条件检索文档。例如,您可以搜索价格在特定范围内的文档,或检索具有特定评分值的文档。
您可以使用以下语法在 FT.CREATE
中向模式添加数字字段
FT.CREATE ... SCHEMA ... {field_name} NUMERIC [SORTABLE] [NOINDEX]
其中
SORTABLE
表示该字段可以排序。这对于执行范围查询和根据数值对搜索结果进行排序很有用。NOINDEX
表示该字段未被索引。这对于存储您不想搜索但想在搜索结果中检索的数值很有用。
您可以使用 @<field_name>:[<min> <max>]
查询语法搜索具有特定数值的文档。例如,此查询查找价格在 200 到 300 之间的文档
FT.SEARCH products "@price:[200 300]"
您还可以使用以下查询语法执行更复杂的数值查询
比较运算符 | 查询字符串 | 注释 |
---|---|---|
min <= x <= max | @field:[min max] | 全包含范围 |
"@field>=min @field<=max" | 全包含范围 * | |
min < x < max | @field:[(min (max] | 全排除范围 |
"@field>min @field<max" | 全排除范围 * | |
用空格分组表示 AND 关系 | ||
x >= min | @field:[min +inf] | 上限开区间 |
@field>=min | 上限开区间 * | |
x <= max | @field:[-inf max] | 下限开区间 |
@field<=max | 下限开区间 * | |
x == val | @field:[val val] | 等于 |
@field:[val] | 等于 * | |
@field==val | 等于 * | |
x != val | -@field:[val val] | 不等于 |
@field!=val | 不等于 * | |
x == val1 or x == val2 | "@field==val1 | @field==val2" | 用竖线分组表示 OR 关系 * |
* RediSearch v2.10 及更高版本的新语法。需要 DIALECT 2
。
地理字段
地理字段用于存储地理坐标,如经度和纬度。它们支持地理空间半径查询,允许您在应用程序中实现基于位置的搜索功能,例如查找附近的餐厅、商店或其他任何兴趣点。
您可以使用以下语法在 FT.CREATE
中向模式添加地理字段
FT.CREATE ... SCHEMA ... {field_name} GEO [SORTABLE] [NOINDEX]
其中
SORTABLE
表示该字段可以排序。这对于执行范围查询和根据坐标对搜索结果进行排序很有用。NOINDEX
表示该字段未被索引。这对于存储您不想搜索但仍想在搜索结果中检索的坐标很有用。
您可以使用 @<field_name>:[<lon> <lat> <radius> <unit>]
查询语法查询地理字段。例如,此查询查找距离点 2.34, 48.86
1000 公里的文档
FT.SEARCH cities "@coords:[2.34 48.86 1000 km]"
向量字段
向量字段是浮点向量,通常由外部机器学习模型生成。这些向量表示非结构化数据,例如文本、图像或其他复杂特征。Redis Stack 允许您使用向量搜索算法(如余弦相似度、欧几里得距离和内积)搜索相似的向量。这使您能够构建高级搜索应用程序、推荐系统或内容相似性分析。
您可以使用以下语法在 FT.CREATE
中向模式添加向量字段
FT.CREATE ... SCHEMA ... {field_name} VECTOR {algorithm} {count} [{attribute_name} {attribute_value} ...]
其中
-
{algorithm}
必须指定,并且必须是受支持的向量相似性索引算法。支持的算法为FLAT
:暴力算法。HNSW
:分层、可导航、小世界算法。
{algorithm}
属性指定在索引中搜索k
个最相似向量或按范围过滤向量时要使用的算法。 -
{count}
指定索引的属性数量,必须存在。请注意,{count}
表示命令中传递的属性对的总数。算法参数应作为命名参数提交。例如
FT.CREATE my_idx SCHEMA vec_field VECTOR FLAT 6 TYPE FLOAT32 DIM 128 DISTANCE_METRIC L2
这里,三个参数被传递到索引 (
TYPE
、DIM
、DISTANCE_METRIC
),count
是属性总数 (6)。 -
{attribute_name} {attribute_value}
是用于创建向量索引的算法属性。每个算法都有自己的必填属性和可选属性。
有关向量字段的更多信息,请参阅 向量字段。
标签字段
标签字段用于存储表示数据标签或标记集合的文本数据。标签字段的特征是基数低,这意味着它们通常具有有限数量的独特值。与文本字段不同,标签字段按原样存储,不进行标记化或词干提取。它们对于组织和分类数据非常有用,使根据特定标签过滤和检索文档变得更容易。
可以使用以下语法将标签字段添加到模式
FT.CREATE ... SCHEMA ... {field_name} TAG [SEPARATOR {sep}] [CASESENSITIVE]
其中
-
SEPARATOR
默认值为逗号 (,
),可以是任何可打印的 ASCII 字符。它用于分隔字段值中的标签。例如,如果字段值为hello,world
,则标签为hello
和world
。 -
CASESENSITIVE
表示该字段区分大小写。默认情况下,标签字段不区分大小写。
您可以使用 @<field_name>:{<tag>}
查询语法搜索具有特定标签的文档。例如,此查询查找具有 blue
标签的文档
FT.SEARCH idx "@tags:{blue}"
有关标签字段的更多信息,请参阅 标签字段。
文本字段
文本字段专门用于存储人类语言文本。在索引文本字段时,Redis Stack 会执行一些转换来优化搜索功能。文本将转换为小写,允许不区分大小写的搜索。数据将被标记化,这意味着它被分割成单个单词或标记,这使得高效的全文搜索功能成为可能。文本字段可以加权,以便在搜索操作期间将不同的重要性级别分配给特定字段。此外,文本字段可以根据其值排序,从而可以根据相关性或其他标准对搜索结果进行排序。
可以使用以下语法将文本字段添加到模式
FT.CREATE ... SCHEMA ... {field_name} TEXT [WEIGHT] [NOSTEM] [PHONETIC {matcher}] [SORTABLE] [NOINDEX] [WITHSUFFIXTRIE]
其中
-
WEIGHT
表示该字段加权。这对于在搜索操作期间将不同的重要性级别分配给特定字段很有用。 -
NOSTEM
表示该字段未进行词干提取。这对于存储您不想进行标记化的文本很有用,例如 URL 或电子邮件地址。 -
PHONETIC {matcher}
将文本属性声明为PHONETIC
将默认情况下在搜索中对其执行音韵匹配。必需的匹配器参数指定使用的音韵算法和语言。支持以下匹配器dm:en
- 英文双元音韵dm:fr
- 法文双元音韵dm:pt
- 葡萄牙语双元音韵dm:es
- 西班牙语双元音韵
有关更多信息,请参阅 音韵匹配。
-
SORTABLE
表示该字段可以排序。这对于执行范围查询和根据文本值对搜索结果进行排序很有用。 -
NOINDEX
表示该字段未被索引。这对于存储您不想搜索但仍想在搜索结果中检索的文本很有用。 -
WITHSUFFIXTRIE
表示该字段将使用后缀树进行索引。索引将保留一个后缀树,其中包含与后缀匹配的所有术语。它用于优化contains (*foo*)
和suffix (*foo)
查询。否则,将在树上执行暴力搜索。如果某些字段存在后缀树,则这些查询将被禁用以用于其他字段。
您可以使用 <term>
或 @<field_name>:{<term>}
查询语法搜索具有特定文本值的文档。以下是一些示例
-
在每个文本属性中搜索术语
FT.SEARCH books-idx "wizard"
-
仅在
title
属性中搜索术语FT.SEARCH books-idx "@title:dogs"