英尺。创造
FT.CREATE index [ON HASH | JSON] [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 ...]] [SKIPINITIALSCAN] SCHEMA field_name [AS alias] TEXT | TAG | NUMERIC | GEO | VECTOR | GEOSHAPE [ SORTABLE [UNF]] [NOINDEX] [ field_name [AS alias] TEXT | TAG | NUMERIC | GEO | VECTOR | GEOSHAPE [ SORTABLE [UNF]] [NOINDEX] ...]
描述
使用给定的规范创建索引。有关用法,请参阅示例。
必需参数
index
是要创建的索引名称。
如果此类索引已存在,则返回错误回复(error) Index already exists
.
SCHEMA {identifier} AS {attribute} {attribute type} {options...
在 SCHEMA 关键字之后,声明要索引的字段:
-
{identifier}
对于哈希,是哈希中的字段名称。 对于 JSON,标识符是 JSON 路径表达式。 -
AS {attribute}
定义与标识符关联的属性。例如,您可以使用此功能为复杂的 JSONPath 表达式添加别名,使其名称更易记(且更易于键入)。
字段类型包括:
-
TEXT
- 允许对此属性中的值进行全文搜索查询。 -
TAG
- 允许对此属性中的值进行完全匹配的查询,如类别或主键。有关更多信息,请参阅标记字段。 -
NUMERIC
- 允许针对此属性中的值进行数值范围查询。有关如何使用数值范围的详细信息,请参阅查询语法文档。 -
GEO
- 允许针对此属性中的值 (point) 进行半径范围查询。该属性的值必须是一个字符串,其中包含经度 (first) 和纬度,以逗号分隔。 -
VECTOR
- 允许对此属性中的值进行向量查询。这需要查询方言 2 或更高版本(在 RediSearch v2.4 中引入)。有关更多信息,请参阅矢量字段。 -
GEOSHAPE
- 允许对此属性中的值进行多边形查询。该属性的值必须遵循表示多边形边缘的 2D 点的 WKT 表示法列表POLYGON((x1 y1, x2 y2, ...)
用逗号分隔。一个GEOSHAPE
field type 可以后跟以下坐标系之一:SPHERICAL
对于 Geographic longitude and latitude coordinatesFLAT
对于笛卡尔 X Y 坐标
默认坐标系为
SPHERICAL
.现在
GEOSHAPE
不支持 JSON 多值和SORTABLE
选择。
字段选项包括:
-
SORTABLE
-NUMERIC
,TAG
,TEXT
或GEO
attributes 可以具有可选的 SORTABLE 参数。当用户按此属性的值对结果进行排序时,结果的延迟非常低。请注意,his 会增加内存开销,因此请考虑不要在大型 text 属性上声明它。您可以对属性进行排序,但可以不使用SORTABLE
选项,但延迟不如SORTABLE
. -
UNF
- 默认情况下,对于哈希(不使用 JSON)SORTABLE
对索引值应用规范化(字符设置为小写,删除音调符号)。使用非规范化形式 (UNF) 时,您可以禁用规范化并保留值的原始形式。使用 JSON,UNF
隐式与SORTABLE
(标准化已禁用)。 -
NOSTEM
- 文本属性可以具有 NOSTEM 参数,该参数在为其值编制索引时禁用词干提取。这可能非常适合专有名词等内容。 -
NOINDEX
- 属性可以具有NOINDEX
选项,这意味着它们不会被索引。这与SORTABLE
创建属性,使用 PARTIAL 进行更新不会导致文档完全重新编制索引。如果一个属性有 NOINDEX 但没有 SORTABLE,它就会被索引忽略。 -
PHONETIC {matcher}
- 将 text 属性声明为PHONETIC
将在搜索中默认对其进行语音匹配。强制性 {matcher} 参数指定使用的语音算法和语言。支持以下匹配器:dm:en
- 英语双变音dm:fr
- 法语的双变音器dm:pt
- 葡萄牙语的双变音dm:es
- 西班牙语的双变音
有关详细信息,请参阅 拼音匹配。
-
WEIGHT {weight}
为TEXT
属性,声明在计算结果准确性时此属性的重要性。这是一个乘法因子,如果未指定,则默认为 1。 -
SEPARATOR {sep}
为TAG
attributes,指示如何将属性中包含的文本拆分为单个标记。默认值为,
.该值必须是单个字符。 -
CASESENSITIVE
为TAG
attributes,保留标签的原始字母大小写。如果未指定,则字符将转换为小写。 -
WITHSUFFIXTRIE
为TEXT
和TAG
attributes,保留一个后缀 trie 与后缀匹配的所有术语。它用于优化contains
(foo)和suffix
(*foo) 查询。否则,将对 trie 执行暴力搜索。如果某些字段存在 suffix trie,则其他字段将禁用这些查询。 -
INDEXEMPTY
为TEXT
和TAG
属性,在 v2.10 中引入,允许您索引和搜索空字符串。默认情况下,不会为空字符串编制索引。 -
INDEXMISSING
对于 v2.10 中引入的所有字段类型,允许您搜索缺失值,即不包含特定字段的文档。请注意具有空值的字段和具有缺失值的文档之间的区别。默认情况下,不会为缺失值编制索引。
可选参数
ON {data_type}
目前支持 HASH(默认)和 JSON。要为 JSON 编制索引,您必须安装 RedisJSON 模块。
PREFIX {count} {prefix}
告诉索引它应该为哪些键编制索引。您可以向 index 添加多个前缀。由于参数是可选的,因此默认值为 (all keys)。*
FILTER {filter}
是具有完整 RediSearch 聚合表达式语言的筛选表达式。可以使用@__key
以访问刚刚添加/更改的密钥。字段可用于设置字段名称,方法是将'FILTER @indexName=="myindexname"'
.
LANGUAGE {default_lang}
如果设置,则指示索引中文档的默认语言。默认值为 English。
LANGUAGE_FIELD {lang_attribute}
是设置为文档语言的文档属性。
在索引期间,词干分析器用于提供的语言。如果发送了不受支持的语言,该命令将返回错误。支持的语言包括阿拉伯语、巴斯克语、加泰罗尼亚语、丹麦语、荷兰语、英语、芬兰语、法语、德语、希腊语、匈牙利语、 印度尼西亚语, 爱尔兰语, 意大利语, 立陶宛语, 尼泊尔语, 挪威语, 葡萄牙语, 罗马尼亚语, 俄语, 西班牙语、瑞典语、泰米尔语、土耳其语和中文。
添加中文文档时,将LANGUAGE chinese
以便索引器正确地标记术语。如果您使用默认语言,则根据标点符号和空格提取搜索词。中文分词器使用分割算法(通过 Friso),该算法对文本进行分割并根据预定义的字典进行检查。有关更多信息,请参见 词干提取 。
SCORE {default_score}
是索引中文档的默认分数。默认分数为 1.0。
SCORE_FIELD {score_attribute}
是文档属性,您根据用户排名用作文档排名。排名必须介于 0.0 和 1.0 之间。如果未设置,则默认分数为 1。
PAYLOAD_FIELD {payload_attribute}
是文档属性,用作文档的二进制安全负载字符串,可在查询时由自定义评分函数评估或检索到客户端。
MAXTEXTFIELDS
强制 RediSearch 对索引进行编码,就好像有 32 个以上的文本属性一样,这允许您使用FT.ALTER
.为了提高效率,如果索引创建时的文本属性少于 32 个,则 RediSearch 会以不同的方式对索引进行编码。
NOOFFSETS
不存储文档的术语偏移量。它可以节省内存,但不允许精确搜索或突出显示。它意味着NOHL
.
TEMPORARY {seconds}
创建一个轻量级临时索引,该索引在指定的非活动时间(以秒为单位)后过期。每当搜索或添加索引时,都会重置内部空闲计时器。由于此类索引是轻量级的,因此您可以创建数千个此类索引,而不会对性能产生负面影响,因此,您应该考虑使用SKIPINITIALSCAN
以避免昂贵的扫描。
FT.DROPINDEX
引入时,默认为不删除文档,并且DD
强制删除的标志。
但是,对于临时索引,文档将与索引一起删除。
从历史上看,RediSearch 使用 FT.ADD 命令,该命令在文档和索引之间建立连接。然后,FT.DROP 也是一个历史命令,默认情况下会删除文档。
在版本 2.x 中,RediSearch 为哈希和 JSON 编制索引,索引和文档之间的依赖关系不再存在。NOHL
通过禁用高亮显示支持来节省存储空间和内存。如果设置,则不会存储术语位置的相应字节偏移量。NOHL
也由NOOFFSETS
.
NOFIELDS
不存储每个术语的属性位。它可以节省内存,但不允许 按特定属性筛选。
NOFREQS
避免在索引中保存术语 frequencies。它可以节省内存,但不允许根据文档中给定术语的频率进行排序。
STOPWORDS {count}
使用自定义非索引字列表设置索引,以便在索引和搜索时忽略。{count}
是停用词的数量,后跟一个停用词参数列表,其长度恰好是{count}
.
如果未设置,则为 FT.CREATE 采用默认的停用词列表。如果{count}
设置为 0,则索引没有停用词。
SKIPINITIALSCAN
如果设置,则不扫描和索引。
-
属性数量限制:RediSearch 支持每个架构最多 1024 个属性,其中最多 128 个可以是 TEXT 属性。在 32 位构建中,最多可以有 64 个属性是 TEXT 属性。您拥有的属性越多,索引就越大,因为每增加 8 个属性就需要每个索引记录额外编码一个字节。您始终可以使用
NOFIELDS
选项,而不是将属性信息编码到索引中,以节省空间(如果您不需要按文本属性进行筛选)。这仍将允许按 numeric 和 geo 属性进行筛选。 -
在集群数据库中运行:当聚集数据库中有多个索引时,您需要确保要索引的文档与索引位于同一分片上。您可以通过按索引名称标记文档来实现此目的。
127.0.0.1:6379> HSET doc:1{idx} ... 127.0.0.1:6379> FT.CREATE idx ... PREFIX 1 doc: ...
When Running RediSearch in a clustered database, you can span the index across shards using RSCoordinator. In this case the above does not apply.
Return
FT.CREATE returns a simple string reply OK
if executed correctly, or an error reply otherwise.
Examples
Create an index
Create an index that stores the title, publication date, and categories of blog post hashes whose keys start with blog:post:
(for example, blog:post:1
).
127.0.0.1:6379> FT.CREATE idx ON HASH PREFIX 1 blog:post: SCHEMA title TEXT SORTABLE published_at NUMERIC SORTABLE category TAG SORTABLE
OK
Index the sku
attribute from a hash as both a TAG
and as 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 TAG SORTABLE
Index two different hashes, one containing author data and one containing books, in the same index:
127.0.0.1:6379> FT.CREATE author-books-idx ON HASH PREFIX 2 author:details: book:details: SCHEMA
author_id TAG SORTABLE author_ids TAG title TEXT name TEXT
In this example, keys for author data use the key pattern author:details:<id>
while keys for book data use the pattern book:details:<id>
.
Index authors whose names start with G.
127.0.0.1:6379> FT.CREATE g-authors-idx ON HASH PREFIX 1 author:details FILTER 'startswith(@name, "G")' SCHEMA name TEXT
Index only books that have a subtitle.
127.0.0.1:6379> FT.CREATE subtitled-books-idx ON HASH PREFIX 1 book:details FILTER '@subtitle != ""' SCHEMA title TEXT
Index books that have a "categories" attribute where each category is separated by a ;
character.
127.0.0.1:6379> FT.CREATE books-idx ON HASH PREFIX 1 book:details SCHEMA title TEXT categories TAG SEPARATOR ";"
Index a JSON document using a JSON Path expression
The following example uses data similar to the hash examples above but uses JSON instead.
127.0.0.1:6379> FT.CREATE idx ON JSON SCHEMA $.title AS title TEXT $.categories AS categories TAG
See also
Related topics
History
- Starting with Redis version 2.0.0: Added
PAYLOAD_FIELD
argument for backward support of FT.SEARCH
deprecated WITHPAYLOADS
argument
- Starting with Redis version 2.0.0: Deprecated
PAYLOAD_FIELD
argument