redisearch+redisJSON联合使用
上一篇学习了redisearch+hash的使用redisearch+springboot的简单使用
FT.CREATE {index}[ON {data_type}][PREFIX {count} {prefix} [{prefix} ..][LANGUAGE {default_lang}]SCHEMA {identifier} [AS {attribute}][TEXT | NUMERIC | GEO | TAG ] [CASESENSITIVE][SORTABLE] [NOINDEX]] ...
使用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 索引:
FT.CREATE {index_name} ON JSON SCHEMA {json_path} AS {attribute} {type}
每个 JSONPath 表达式的结果(即json中的字段)都和索引中称为 attribute
(以前hash中称为 field
)的逻辑名称相关联。
例如,此命令创建一个索引,该索引代表 与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
"OK"
添加 JSON 文档
可以使用任何 RedisJSON 写入命令,例如JSON.SET和JSON.ARRAPPEND来创建或修改 JSON 文档。
因为索引与JSON文档是关联同步的,所以只要JSON.SET命令返回,文档就会在索引上可用。任何与索引内容匹配的后续查询都将返回该文档。
现在有这样2个JSON文档数据:
{"name": "锤子8plus","description": "锤子手机-5G-128G","brandName":"锤子","price": 3299
}
{"name": "华为Mate40 pro","description": "HuaWei-5G-128G","brandName":"华为","price": 6499
}
使用JSON.SET命令添加文档 (a1、a2表示文档的ID,唯一)
> JSON.SET a1 $ '{"name": "锤子8plus","description": "锤子手机-5G-128G","brandName":"锤子","price": 3299}'
"OK"
> JSON.SET a2 $ '{"name": "华为Mate40 pro","description": "HuaWei-5G-128G","brandName":"华为","price": 6499}'
"OK"
1.建立完索引后,我们就可以使用FT.SEARCH
对数据进行查看了,比如使用*
可以查询全部;
FT.SEARCH itemIdx *
2.由于我们设置了price
字段为SORTABLE
,我们可以以price
降序返回商品信息;
FT.SEARCH itemIdx * SORTBY price DESC
3.还可以返回指定字段的数据;
FT.SEARCH itemIdx * RETURN 2 name price
表示返回2个字段,分别是name、price
4.我们把brandName
设置为了TAG
类型,我们可以使用如下语句查询品牌为华为或锤子的商品;
查询TAG类型,要用{}
FT.SEARCH itemIdx '@brandName:{华为 | 锤子}'
5.由于price
是NUMERIC
类型,我们可以使用如下语句查询价格在3000~4000
的商品;
FT.SEARCH itemIdx '@price:[3000 4000]'
6.还可以使用像like一样的模糊查询,例:查询name以华为开头的
FT.SEARCH item '@name:华为*'
7.在FT.SEARCH
中直接指定搜索关键词,可以对所有TEXT
类型的属性进行全局搜索,支持中文搜索
FT.SEARCH itemIdx '手机'
8.也可以指定搜索的字段,比如搜索description中带有5G字段的商品;
FT.SEARCH itemIdx '@description:5G'
9.还可以搜索description中带有锤子和5G字段的商品;用空格表示AND
FT.SEARCH itemIdx '@description:(锤子 5G)'
10.还可以搜索description中带有锤子或5G字段的商品;用 | 代表或
FT.SEARCH itemIdx '@description:(锤子 | 5G)'
11.还可以多字段,多条件查询,例:搜索name中带有华为字段,并且price在5000~7000的商品
FT.SEARCH itemIdx '@name:(华为) @price:[5000,7000]'
12.还可以使用HIGHLIGHT来进行高亮显示效果(默认对搜索关键字加上<b></b>)
HIGHLIGHT必须跟在return后面,return 1 name表示返回一个name字段;对name字段高亮显示。测试了一下,高亮只对TEXT类型有效。
FT.SEARCH itemIdx '@name:(华为)' return 1 name HIGHLIGHT
13.如果高亮不想使用<b></b>,还可以用TAGS来设置自己想要的标签
FT.SEARCH itemIdx '@name:(华为)' return 1 name HIGHLIGHT TAGS '<p>' '</p>'
14.我们还可用limit来限制搜索返回的数量
FT.SEARCH itemIdx '@description:(5G)' limit 0 2
15.通过FT.DROPINDEX
命令可以删除索引,如果不加DD只会删除索引,与索引关联的JSON文档不会删除;如果加入DD
选项的话,会连数据一起删除;
FT.DROPINDEX itemIdx DD
使用JSON的方式与HASH相比,JSON更快。在对数据做修改时,hash需要删除整个文档再将修改后的文档添加,而json可以直接对文档中的某一字段修改。
用redisInsight可视化工具可以看到有这样一份文档
现在想要对文档中的price修改为3499;
在RedisJSON中,获取JSON对象中的属性时需要以 .
开头
> JSON.SET a1 .price 3499
"OK"
可以看到数据已经改变了。
还有更多的使用方式可以查看官网的介绍https://redis.io/docs/stack/search/indexing_json/#highlight-search-terms
redisearch+redisJSON联合使用相关推荐
- 比 Elasticsearch 更快 RediSearch + RedisJSON = 王炸
Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...
- 比 Elasticsearch 更快!RediSearch + RedisJSON = 王炸
Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...
- 比 Elasticsearch 更快RediSearch + RedisJSON = 王炸
Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...
- 比 Elasticsearch 更快,RediSearch + RedisJSON = 王炸
Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...
- 比 Elasticsearch 更快, RediSearch + RedisJSON = 王炸
Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...
- 比 Elasticsearch 更快, RediSearch + RedisJSON = 王炸~
Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...
- 千万级数据查询中CK、ES、RediSearch方案的优化
前言 在开发中遇到一个业务诉求,需要在千万量级的底池数据中筛选出不超过 10W 的数据,并根据配置的权重规则进行排序.打散(如同一个类目下的商品数据不能连续出现 3 次). 下面对该业务诉求的实现,设 ...
- 千万级数据查询:CK、ES、RediSearch怎么选?
点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...
- redisearch+springboot的简单使用
安装 推荐使用docker安装,使用以下命令即可安装并启动redisearch docker run -p 6379:6379 redislabs/redisearch:latest 通过下载redi ...
最新文章
- Oracle Database 11g的使用
- k8s集群部署一(最新版docker安装)
- HDOJ HDU 2080 夹角有多大II ACM 2080 IN HDU
- head first html with css with xhtml 学习小笔记
- 图像卷积与滤波知识点整理(2)
- 数据结构关键路径_2021年厦门大学考研丨能源学院845数据结构参考书目推荐
- 【leetcode】给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff数对。
- Linux ag命令
- windows功能正在搜索需要的文件_拥有高效的搜索工具Everything,可以丢开Windows的搜索功能了...
- php 调用高拍仪,html页面通过ActiveX控件调用摄像头实现拍照上传demo代码下载
- 【微信小程序毕业设计源代码】最近开发的60个java+python微信小程序源码+毕业设计选题推荐
- [转]VS2013+简单稀疏光束调整库SSBA配置(64位编译)
- 【C语言练习——打印上三角及其变形】
- 简单做一段自己CSGO游戏的视频
- Excel 模拟form表单提交
- 如何使用方位X210来查看海康威视IP摄像头
- 计算机设置用户名密码,电脑账户密码如何设置/修改?
- Python nbs***bsp; 乱码
- 【论文分享】★★★「SOTA」小样本图神经网络分类模型 HGNN:Hybrid Graph Neural Networks for Few-Shot Learning
- 【文末有福利! 】刷脸开锁:背后的技术绝招