字段和类型选项

可用的字段类型和选项。

Redis Stack 提供了多种字段类型,允许您在索引中存储和搜索不同类型的数据。本页解释了可用的字段类型、它们的特性以及如何有效地使用它们。

数值字段

数字字段用于存储非文本、可计数的值。它们可以保存整数或浮点数值。数字字段是可排序的,这意味着您可以执行基于范围的查询,并根据特定的数字条件检索文档。例如,您可以搜索价格在某个范围内的文档,或检索具有特定评分值的文档。

您可以使用以下语法在FT.CREATE中添加数字字段到模式中:

FT.CREATE ... SCHEMA ... {field_name} NUMERIC [SORTABLE] [NOINDEX]

其中:

  • SORTABLE 表示该字段可以排序。这对于执行范围查询和基于数值排序搜索结果非常有用。
  • NOINDEX 表示该字段未被索引。这对于存储你不想搜索但希望在搜索结果中检索的数值非常有用。

您可以使用@:[ ]查询语法搜索具有特定数值的文档。例如,此查询查找价格在200到300之间的文档:

FT.SEARCH products "@price:[200 300]"

您还可以使用以下查询语法来执行更复杂的数值查询:

比较运算符 查询字符串 注释
min <= x <= max @field:[min max] 完全包含的范围
"@field>=min @field<=max" 完全包含的范围 *
最小值 < x < 最大值 @field:[(min (max] 完全排除范围
"@field>min @field 完全排除范围 *
使用空格分组表示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 或 x == val2 "@field==val1 | @field==val2" 使用竖线分组表示OR关系 *

* 自 RediSearch v2.10 起的新语法。需要 DIALECT 2

地理字段

地理字段用于存储地理坐标,如经度和纬度。它们支持地理空间半径查询,使您能够在应用程序中实现基于位置的搜索功能,例如查找附近的餐厅、商店或任何其他兴趣点。

您可以使用以下语法在FT.CREATE中添加地理字段到模式中:

FT.CREATE ... SCHEMA ... {field_name} GEO [SORTABLE] [NOINDEX]

其中:

  • SORTABLE 表示该字段可以排序。这对于执行范围查询和基于坐标排序搜索结果非常有用。
  • NOINDEX 表示该字段未被索引。这对于存储你不想搜索但希望在搜索结果中检索的坐标非常有用。

您可以使用@:[ ]查询语法来查询地理字段。例如,此查询查找距离点2.34, 48.861000公里内的文档:

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} 是用于创建向量索引的算法属性。每个算法都有其自己的必需和可选属性。

有关向量场的更多信息,请参见vector fields

标签字段

标签字段用于存储表示数据标签或标签集合的文本数据。标签字段的特点是它们的基数低,意味着它们通常具有有限数量的不同值。与文本字段不同,标签字段按原样存储,不进行分词或词干提取。它们对于组织和分类数据非常有用,使得基于特定标签过滤和检索文档变得更加容易。

可以使用以下语法将标签字段添加到模式中:

FT.CREATE ... SCHEMA ... {field_name} TAG [SEPARATOR {sep}] [CASESENSITIVE]

其中

  • SEPARATOR 默认为逗号 (,),可以是任何可打印的ASCII字符。它用于分隔字段值中的标签。例如,如果字段值是 hello,world,则标签是 helloworld

  • CASESENSITIVE 表示该字段是区分大小写的。默认情况下,标签字段是不区分大小写的。

您可以使用@:{}查询语法搜索带有特定标签的文档。例如,此查询查找带有blue标签的文档:

FT.SEARCH idx "@tags:{blue}"

有关标签字段的更多信息,请参阅Tag Fields

文本字段

文本字段专门设计用于存储人类语言文本。在索引文本字段时,Redis Stack 执行了几种转换以优化搜索能力。文本被转换为小写,允许进行不区分大小写的搜索。数据被分词,意味着它被分割成单独的单词或标记,这实现了高效的全文搜索功能。文本字段可以加权,以便在搜索操作期间为特定字段分配不同级别的重要性。此外,文本字段可以根据其值进行排序,从而能够根据相关性或其他标准对搜索结果进行排序。

可以使用以下语法将文本字段添加到模式中:

FT.CREATE ... SCHEMA ... {field_name} TEXT [WEIGHT] [NOSTEM] [PHONETIC {matcher}] [SORTABLE] [NOINDEX] [WITHSUFFIXTRIE]

其中

  • WEIGHT 表示该字段是加权的。这在搜索操作中为特定字段分配不同级别的重要性时非常有用。

  • NOSTEM 表示该字段不会被词干化。这对于存储不希望被分词的文本非常有用,例如URL或电子邮件地址。

  • PHONETIC {matcher} 将文本属性声明为 PHONETIC 将在搜索中默认对其进行语音匹配。必需的 matcher 参数指定了使用的语音算法和语言。支持以下匹配器:

    • dm:en - 英语的双重音位
    • dm:fr - 法语的双重音位
    • dm:pt - 葡萄牙语的双重音位
    • dm:es - 西班牙语的双重音位

    更多信息,请参见 语音匹配

  • SORTABLE 表示该字段可以排序。这对于执行范围查询和基于文本值排序搜索结果非常有用。

  • NOINDEX 表示该字段未被索引。这对于存储你不想搜索但仍希望在搜索结果中检索的文本非常有用。

  • WITHSUFFIXTRIE 表示该字段将使用后缀树进行索引。索引将保留一个包含所有匹配后缀的术语的后缀树。它用于优化 contains (*foo*)suffix (*foo) 查询。否则,将在树上执行暴力搜索。如果某些字段存在后缀树,这些查询将在其他字段上被禁用。

您可以使用@:{}查询语法搜索具有特定文本值的文档。以下是几个示例:

  • 在每个文本属性中搜索一个术语:

    FT.SEARCH books-idx "wizard"
    
  • 仅在title属性中搜索一个术语

    FT.SEARCH books-idx "@title:dogs"
    
RATE THIS PAGE
Back to top ↑