上一篇学习了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.由于priceNUMERIC类型,我们可以使用如下语句查询价格在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联合使用相关推荐

  1. 比 Elasticsearch 更快 RediSearch + RedisJSON = 王炸

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  2. 比 Elasticsearch 更快!RediSearch + RedisJSON = 王炸

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  3. 比 Elasticsearch 更快RediSearch + RedisJSON = 王炸

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  4. 比 Elasticsearch 更快,RediSearch + RedisJSON = 王炸

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  5. 比 Elasticsearch 更快, RediSearch + RedisJSON = 王炸

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  6. 比 Elasticsearch 更快, RediSearch + RedisJSON = 王炸~

    Redis是开发中非常常用的内存数据存储中间件,之前基本上用它来做内存存储使用.最近发现Redis推出了很多增强模块,例如通过RedisJSON可以支持原生JSON对象的存储,使用RediSearch ...

  7. 千万级数据查询中CK、ES、RediSearch方案的优化

    前言 在开发中遇到一个业务诉求,需要在千万量级的底池数据中筛选出不超过 10W 的数据,并根据配置的权重规则进行排序.打散(如同一个类目下的商品数据不能连续出现 3 次). 下面对该业务诉求的实现,设 ...

  8. 千万级数据查询:CK、ES、RediSearch怎么选?

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...

  9. redisearch+springboot的简单使用

    安装 推荐使用docker安装,使用以下命令即可安装并启动redisearch docker run -p 6379:6379 redislabs/redisearch:latest 通过下载redi ...

最新文章

  1. Oracle Database 11g的使用
  2. k8s集群部署一(最新版docker安装)
  3. HDOJ HDU 2080 夹角有多大II ACM 2080 IN HDU
  4. head first html with css with xhtml 学习小笔记
  5. 图像卷积与滤波知识点整理(2)
  6. 数据结构关键路径_2021年厦门大学考研丨能源学院845数据结构参考书目推荐
  7. 【leetcode】给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff数对。
  8. Linux ag命令
  9. windows功能正在搜索需要的文件_拥有高效的搜索工具Everything,可以丢开Windows的搜索功能了...
  10. php 调用高拍仪,html页面通过ActiveX控件调用摄像头实现拍照上传demo代码下载
  11. 【微信小程序毕业设计源代码】最近开发的60个java+python微信小程序源码+毕业设计选题推荐
  12. [转]VS2013+简单稀疏光束调整库SSBA配置(64位编译)
  13. 【C语言练习——打印上三角及其变形】
  14. 简单做一段自己CSGO游戏的视频
  15. Excel 模拟form表单提交
  16. 如何使用方位X210来查看海康威视IP摄像头
  17. 计算机设置用户名密码,电脑账户密码如何设置/修改?
  18. Python nbs***bsp; 乱码
  19. 【论文分享】★★★「SOTA」小样本图神经网络分类模型 HGNN:Hybrid Graph Neural Networks for Few-Shot Learning
  20. 【文末有福利! 】刷脸开锁:背后的技术绝招

热门文章

  1. Paul Hudak谈Haskell
  2. 两台windows电脑不能ping通
  3. matlab打开pcm文件格式,用MATLAB实现PCM编码
  4. 深度学习【43】BEGAN
  5. 百大项目集中开工 湖南湘江新区奋力夺取新春“开门红”
  6. lpc matlab 预测,LPC特征提取 matlab
  7. 加速度传感器原理、结构、使用方法等介绍
  8. 【基于VS2010的MFC编程】四则运算计算器
  9. QGraphicsScene和QGraphicsView坐标系统
  10. C~K的班级(java)