# 创建索引
FT.CREATE {index}
[ON {data_type}]
[PREFIX {count} {prefix} [{prefix} ..]
[LANGUAGE {default_lang}]
SCHEMA {identifier} [AS {attribute}]
[TEXT | NUMERIC | GEO | TAG ] [CASESENSITIVE]
[SORTABLE] [NOINDEX]] ...
1
2
3
4
5
6
7
2
3
4
5
6
7
使用FT.CREATE命令可以建立索引,语法中的参数意义如下;
index:索引名称;
data_type:建立索引的数据类型,目前支持JSON或者HASH两种;
PREFIX:通过它可以选择需要建立索引的数据前缀,比如PREFIX 1 "product:"表示为键中以product:为前缀的数据建立索引;
LANGUAGE:指定TEXT类型属性的默认语言,使用chinese可以设置为中文;
identifier:指定属性名称;
attribute:指定属性别名;
TEXT | NUMERIC | GEO | TAG:这些都是属性可选的类型;
SORTABLE:指定属性可以进行排序。
FT.CREATE 当您使用该命令创建JSON索引后,存储在数据库中的任何现有和未来的 JSON 文档会自动与之关联。
例如,此命令创建一个索引,该索引代表 与JSON 文档中的name、description 、brandName和price相关联进行索引,设置索引语言为chinese:
FT.CREATE itemIdx ON JSON LANGUAGE chinese SCHEMA $.name AS name TEXT $.description as description TEXT $.brandName AS brandName TAG $.price AS price NUMERIC SORTABLE
1
# 添加JSON文档
可以使用任何 RedisJSON 写入命令,例如JSON.SET和JSON.ARRAPPEND来创建或修改 JSON 文档。
因为索引与JSON文档是关联同步的,所以只要JSON.SET命令返回,文档就会在索引上可用。任何与索引内容匹配的后续查询都将返回该文档。
使用JSON.SET命令添加文档 (a1、a2表示文档的ID,唯一)
JSON.SET a1 $ '{"name": "锤子8plus","description": "锤子手机-5G-128G","brandName":"锤子","price": 3299}'
JSON.SET a2 $ '{"name": "华为Mate40 pro","description": "HuaWei-5G-128G","brandName":"华为","price": 6499}'
1
2
3
2
3
# 查询数据
# 所有
FT.SEARCH itemIdx *
# price降序
FT.SEARCH itemIdx * SORTBY price DESC
# 返回指定字段 name、price
FT.SEARCH itemIdx * RETURN 2 name price
# TAG类型
FT.SEARCH itemIdx '@brandName:{华为 | 锤子}'
# NUMERIC类型 区间查询
FT.SEARCH itemIdx '@price:[3000 4000]'
# like模糊查询
FT.SEARCH item '@name:华为*'
# 对所有TEXT类型的属性进行全局搜索,支持中文搜索
FT.SEARCH itemIdx '手机'
# 指定搜索的字段
FT.SEARCH itemIdx '@description:5G'
# 搜索description中带有锤子和5G字段的商品;用空格表示AND
FT.SEARCH itemIdx '@description:(锤子 5G)'
# description中带有锤子或5G字段的商品;用 | 代表或
FT.SEARCH itemIdx '@description:(锤子 | 5G)'
# 多字段查询
FT.SEARCH itemIdx '@name:(华为) @price:[5000,7000]'
# 使用HIGHLIGHT来进行高亮显示效果(默认对搜索关键字加上<b></b>)
# HIGHLIGHT必须跟在return后面,return 1 name表示返回一个name字段;对name字段高亮显示。测试了一下,高亮只对TEXT类型有效。
FT.SEARCH itemIdx '@name:(华为)' return 1 name HIGHLIGHT
# 自定义高亮标签
FT.SEARCH itemIdx '@name:(华为)' return 1 name HIGHLIGHT TAGS '<p>' '</p>'
# limit限制
FT.SEARCH itemIdx '@description:(5G)' limit 0 2
# 删除索引,如果不加DD只会删除索引,与索引关联的JSON文档不会删除;如果加入DD选项的话,会连数据一起删除;
FT.DROPINDEX itemIdx DD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45