FT.CREATE
创建具有给定规格的索引
语法
FT.CREATE index [ON ] [PREFIX count prefix [prefix ...]] [FILTER filter] [LANGUAGE default lang] [LANGUAGE FIELD lang attribute] [SCORE default score] [SCORE FIELD score attribute] [PAYLOAD FIELD payload attribute] [MAXTEXTFIELDS] [TEMPORARY seconds] [NOOFFSETS] [NOHL] [NOFIELDS] [NOFREQS] [STOPWORDS count [stopword [stopword ...]]] [SKIPINITIALSCAN] [INDEXALL ] SCHEMA field name [AS alias] [WITHSUFFIXTRIE] [INDEXEMPTY] [INDEXMISSING] [SORTABLE [UNF]] [NOINDEX] [field name [AS alias] [WITHSUFFIXTRIE] [INDEXEMPTY] [INDEXMISSING] [SORTABLE [UNF]] [NOINDEX] ...]
引入版本:1.0.0
复杂度摘要:O(K)
说明
创建具有给定规范的索引。使用方法请参见示例。
必需参数
index是要创建的索引名称。如果该索引已存在,则返回错误回复 (error) Index already exists。
SCHEMA {identifier} AS {attribute} {attribute type} {options...在SCHEMA关键字之后,声明要索引的字段:
-
{identifier}用于哈希,是哈希中的字段名称。对于 JSON,标识符是 JSON 路径表达式。 -
AS {attribute}定义与标识符关联的属性。例如,您可以使用此功能为复杂的 JSONPath 表达式添加更容易记住(并且更易于键入)的名称。
字段类型有:
-
TEXT- 允许针对此属性中的值进行全文搜索查询。 -
TAG- 允许针对此属性中的值进行精确匹配查询,例如类别或主键。有关更多信息,请参阅标签字段。 -
NUMERIC- 允许针对此属性中的值进行数字范围查询。有关如何使用数字范围的详细信息,请参阅 查询语法文档。 -
GEO- 允许针对此属性中的值(点)进行半径范围查询。该属性的值必须是一个字符串,其中包含以逗号分隔的经度(第一个)和纬度。 -
VECTOR- 允许针对此属性中的值进行矢量查询。这需要查询方言2或以上版本(RediSearch v2.4中引入)。有关更多信息,请参阅 向量场。 -
GEOSHAPE- 允许针对此属性中的值进行多边形查询。该属性的值必须遵循 WKT表示法 2D 点列表,这些点表示以逗号分隔的多边形边POLYGON((x1 y1, x2 y2, ...)。GEOSHAPE字段类型后可以跟以下坐标系之一: SPHERICAL地理经纬度坐标-
FLAT用于笛卡尔 X Y 坐标默认坐标系为
SPHERICAL。目前
GEOSHAPE不支持JSON多值和SORTABLE选项。
字段选项有:
-
SORTABLE-NUMERIC、TAG、TEXT或GEO属性可以具有可选的 SORTABLE 参数。作为用户 按该属性的值对结果进行排序,可以以非常低的延迟获得结果。请注意,他会增加内存开销,因此请考虑不要在大文本属性上声明它。您可以在不使用SORTABLE选项的情况下对属性进行排序,但延迟不如使用SORTABLE那样好。 -
UNF- 默认情况下,对于哈希(不使用 JSON),SORTABLE对索引值应用标准化(字符设置为小写,删除变音符号)。使用非标准化形式 (UNF) 时,您可以禁用标准化并保留值的原始形式。对于 JSON,UNF与SORTABLE是隐式的(标准化已禁用)。 -
NOSTEM- 文本属性可以具有 NOSTEM 参数,该参数在对其值进行索引时禁用词干分析。这对于专有名称之类的东西可能是理想的。 -
NOINDEX- 属性可以有NOINDEX选项,这意味着它们不会被索引。这与SORTABLE结合使用非常有用,可以创建使用 PARTIAL 进行更新不会导致文档完全重新索引的属性。如果属性具有 NOINDEX 并且没有 SORTABLE,则索引将忽略它。 -
PHONETIC {matcher}- 将文本属性声明为PHONETIC将在默认情况下在搜索中对其执行语音匹配。必需的 {matcher} 参数指定所使用的语音算法和语言。支持以下匹配器: -
dm:en- 英语双变音位 dm:fr- 法语双变音位dm:pt- 葡萄牙语双变音位dm:es- 西班牙语双变音位
有关详细信息,请参阅 语音匹配。
-
WEIGHT {weight}为TEXT属性,声明该属性在计算结果精度时的重要性。这是一个乘法因子,如果未指定,则默认为 1。 -
TAG属性的SEPARATOR {sep}指示如何将属性中包含的文本拆分为单独的标签。默认为,。该值必须是单个字符。 -
TAG属性的CASESENSITIVE保留标签的原始字母大小写。如果未指定,则字符将转换为小写。 -
TEXT和TAG属性的WITHSUFFIXTRIE保留一个后缀特里树,其中包含与后缀匹配的所有术语。它用于优化contains(富) 和suffix(*foo) 查询。否则,将对 trie 执行强力搜索。如果某些字段存在后缀 trie,则其他字段的这些查询将被禁用。 -
v2.10 中引入的
TEXT和TAG属性的INDEXEMPTY允许您索引和搜索空字符串。默认情况下,空字符串不被索引。 -
v2.10 中引入的适用于所有字段类型的
INDEXMISSING允许您搜索缺失值,即不包含特定字段的文档。请注意具有空值的字段和具有缺失值的文档之间的区别。默认情况下,缺失值不会被索引。
可选参数
ON {data_type}目前支持HASH(默认)和JSON。要索引 JSON,您必须安装 RedisJSON 模块。
PREFIX {count} {prefix}告诉索引应该索引哪些键。您可以向索引添加多个前缀。由于该参数是可选的,因此默认值为 *(所有键)。
FILTER {filter}是一个具有完整RediSearch聚合表达式语言的过滤表达式。可以使用 @__key 访问刚刚添加/更改的键。字段可以通过传递 'FILTER @indexName=="myindexname"' 来设置字段名称。
LANGUAGE {default_lang}如果设置,则指示索引中文档的默认语言。默认为英语。
LANGUAGE_FIELD {lang_attribute}是设置为文档语言的文档属性。
词干分析器用于在索引期间提供的语言。如果发送不支持的语言,该命令将返回错误。支持的语言为 arabic、armenian、basque、catalan、chinese(见下文)、danish、dutch、english、finnish、french、german、greek、hindi、hungarian、 indonesian、irish、italian、lithuanian、malay、nepali、norwegian、portuguese、romanian、russian、serbian、spanish、swedish、tagalog、 tamil、turkish 和 yiddish。
添加中文文档时,为索引器设置 LANGUAGE chinese 以正确标记术语。如果您使用默认语言,则会根据标点符号和空格提取搜索词。中文分词器使用分段算法(通过 弗里索),对文本进行分段并根据预定义的字典进行检查。请参阅 词干提取 了解更多信息。
SCORE {default_score}是索引中文档的默认分数。默认分数为 1.0。
SCORE_FIELD {score_attribute}是文档属性,根据用户排名用作文档排名。排名必须介于 0.0 和 1.0 之间。如果未设置,则默认分数为 1。
PAYLOAD_FIELD {payload_attribute}是文档属性,用作文档的二进制安全负载字符串,可以在查询时通过自定义评分函数进行评估或检索到客户端。
MAXTEXTFIELDS强制 RediSearch 对索引进行编码,就像有超过 32 个文本属性一样,这允许您使用 FT.ALTER 添加其他属性(超过 32 个)。为了提高效率,如果索引是使用少于 32 个文本属性创建的,则 RediSearch 会对索引进行不同的编码。
NOOFFSETS不存储文档的术语偏移量。它节省内存,但不允许精确搜索或突出显示。它意味着 NOHL。
TEMPORARY {seconds}创建一个轻量级临时索引,该索引在指定的不活动时间(以秒为单位)后过期。每当搜索或添加索引时,内部空闲计时器都会重置。由于此类索引是轻量级的,因此您可以创建数千个此类索引,而不会产生负面性能影响,因此,您应该考虑使用 SKIPINITIALSCAN 来避免昂贵的扫描。
[!注意]警告
当临时索引过期时,它们会删除与其关联的所有记录。引入
FT.DROPINDEX时默认不删除文档,并使用DD标志强制删除。但是,对于临时索引,文档会与索引一起删除。从历史上看,RediSearch 使用 FT.ADD 命令,该命令在文档和索引之间建立连接。然后,FT.DROP,也是一个历史命令,默认删除文档。在2.x版本中,RediSearch索引哈希和JSON,索引和文档之间的依赖关系不再存在。
NOHL通过禁用突出显示支持来节省存储空间和内存。如果设置,则不存储术语位置的相应字节偏移量。 NOHL 也由 NOOFFSETS 隐含。
NOFIELDS不存储每个术语的属性位。它节省内存,但不允许按特定属性进行过滤。
NOFREQS避免在索引中保存术语频率。它节省内存,但不允许根据文档中给定术语的频率进行排序。
STOPWORDS {count}使用自定义停用词列表设置索引,在索引和搜索时忽略该列表。 {count} 是停用词的数量,后跟与 {count} 长度完全相同的停用词参数列表。
如果未设置,FT.CREATE 将采用默认的停用词列表。如果 {count} 设置为 0,则索引没有停用词。
SKIPINITIALSCAN如果设置,则不扫描和索引。
INDEXALL {ENABLE | DISABLE}v8.0中引入,维护现有文档ID的紧凑索引以优化通配符查询,例如FT.SEARCH idx *。禁用后,通配符查询将扫描所有已分配的 ID(包括已删除的 ID),这可能会损害写入繁重的工作负载中的性能。默认为禁用。
- 属性数量限制: RediSearch 每个架构最多支持 1024 个属性,其中最多 128 个可以是 TEXT 属性。在 32 位版本上,最多 64 个属性可以是 TEXT 属性。属性越多,索引就越大,因为每增加 8 个属性,每个索引记录就需要一个额外的字节进行编码。如果不需要按文本属性进行过滤,您始终可以使用
NOFIELDS选项,而不将属性信息编码到索引中,以节省空间。这仍然允许按数字和地理属性进行过滤。 - 在集群数据库中运行: 当集群数据库中有多个索引时,您需要确保要索引的文档与索引驻留在同一分片上。您可以通过使用索引名称标记文档来实现此目的。
127.0.0.1:6379> HSET 文档:1{idx} ... 127.0.0.1:6379> FT.CREATE idx ... 前缀 1 文档: ...
在集群数据库中运行 RediSearch 时,您可以使用 RS协调员 将索引跨分片。在这种情况下,上述内容不适用。
示例
Create an index
创建一个索引,用于存储博客文章哈希的标题、发布日期和类别,其键以 blog:post: 开头(例如 blog:post:1)。
127.0.0.1:6379> FT.CREATE idx ON HASH PREFIX 1 blog:post: SCHEMA title TEXT SORTABLE Publication_at NUMERIC SORTABLE Category TAG SORTABLE OK
将哈希中的 sku 属性索引为 TAG 和 TEXT:
127.0.0.1:6379> FT.CREATE idx ON HASH PREFIX 1 blog:post: SCHEMA sku AS sku_text TEXT sku AS sku_tag 标签可排序
在同一索引中索引两个不同的哈希值,一个包含作者数据,另一个包含书籍:
127.0.0.1:6379> FT.CREATEauthor-books-idx ON HASH PREFIX 2author:details:book:details:SCHEMAauthor_id标签可排序author_ids标签标题文本名称文本
在此示例中,作者数据的键使用键模式 author:details:<id>,而书籍数据的键使用模式 book:details:<id>。
名字以G开头的索引作者。
127.0.0.1:6379> FT.CREATE g-authors-idx ON HASH PREFIX 1author:details FILTER 'startswith(@name, "G")' SCHEMA name TEXT
仅索引有副标题的书籍。
127.0.0.1:6379> FT.CREATE subtitled-books-idx ON HASH PREFIX 1 book:details FILTER '@subtitle != ""' SCHEMA title TEXT
索引具有“类别”属性的书籍,其中每个类别由 ; 字符分隔。
127.0.0.1:6379> FT.CREATE books-idx ON HASH PREFIX 1 book:details SCHEMA title TEXTcategories TAG SEPARATOR ";"
Index a JSON document using a JSON Path expression
以下示例使用与上面的哈希示例类似的数据,但使用 JSON。
127.0.0.1:6379> FT.CREATE idx ON JSON SCHEMA $.title AS 标题 TEXT $.categories AS 类别 TAG
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis软件 Flex |
Redis Cloud 灵活且每年 |
Redis Cloud 免费和固定 |
说明 |
|---|---|---|---|---|
| ✅ 支持 | ⚠️ 有限 | ✅ 支持 | ✅ 支持 | 对 Flex 数据库 的支持有限。 |
返回值
RESP2
以下之一: * 简单字符串回复:OK(如果执行正确)。 * 简单错误回复 在这些情况下:索引已存在,架构语法无效。
RESP3
以下之一: * 简单字符串回复:OK(如果执行正确)。 * 简单错误回复 在这些情况下:索引已存在,架构语法无效。
参见
相关主题
资料来源:Redis 官方 FT.CREATE 文档;中文内容参考 Redis 文档许可。