论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
Oracle
›
使用 RediSearch 在 Redis 中进行全文检索
使用 RediSearch 在 Redis 中进行全文检索
刘俊凯
金牌会员
|
2023-8-7 13:29:40
|
显示全部楼层
|
阅读模式
楼主
主题
883
|
帖子
883
|
积分
2653
原文链接:
使用 RediSearch 在 Redis 中进行全文检索
Redis 大家肯定都不陌生了,作为一种快速、高性能的键值存储数据库,广泛应用于缓存、队列、会话存储等方面。
然而,Redis 在原生状态下并不支持全文检索功能,这使得处理文本数据变得相对困难。但是在有一些场景下还需要这样的功能,有什么好办法呢?答案就是 RediSearch。
RediSearch 是 Redis 的一个插件,它为 Redis 数据库添加了全文搜索和查询功能,使开发人员能够在 Redis 中高效地执行全文检索操作。
它基于 Redis Module API 构建,通过使用自定义的数据结构和索引算法,实现了高效的全文搜索功能。
安装
如果单纯用来测试的话,可以直接通过 docker 来启动;如果是生产环境,就需要根据公司的实际情况来支持了。
$ docker run -p 6379:6379 redis/redis-stack-server:latest
复制代码
启动服务之后,可以使用 FT.* 命令集来体验搜索功能。
概览
为了使用全文搜索功能,我们必须将文档存储在哈希中,使用命令 FT.CREATE 创建索引并使用 FT.SEARCH 做文本搜索。
这样说可能会比较懵,看下面的示意图就明白了:
现在,让我们插入两条文档:
redis-cli 'hset post:1 title "hello world" body "this is a cool document"'
redis-cli 'hset post:2 title "goodbye everybody" body "this is the best document"'
复制代码
上面命令创建两个哈希值,分别是 post:1 和 post:2,其中包含的字段是 title 和 body。
创建索引
接下来创建索引:
FT.CREATE post_index prefix 1 post: SCHEMA title TEXT body text
复制代码
在这里,我们创建了 post_index 索引,它将索引以 post: 前缀开头的所有 Redis 哈希键。只有 title 和 body 字段才会被索引,并且索引立即生效。
搜索索引
使用 FT.SEARCH 命令,参数是索引名称和需要搜索的关键词:
FT.SEARCH post_index "world"
复制代码
实时索引
当新增一个文档时,它会被自动添加到索引:
redis-cli 'hset post:3 title "really?" body "yeah"'
复制代码
立即可以被搜索到:
> ft.search post_index "really"
1) (integer) 1
2) "post:3"
3) 1) "title"
2) "really?"
3) "body"
4) "yeah"
复制代码
搜索特定字段
可以选择要搜索的字段,比如 title:
ft.search post_index "@title:world"
复制代码
按列表中的任何单词搜索
类似于逻辑 OR 操作,比如要查找与 hello 或 goodbye 匹配的所有文档:
ft.search post_index "hello|goodbye"
复制代码
搜索结果分页
和 SQL 是一样的,使用 LIMIT 关键词,比如:
ft.search post_index "world" LIMIT 10, 5
复制代码
反向搜索
在搜索关键词前使用 - 来排除结果中包含该字段的信息:
ft.search post_index "-foo"
复制代码
部分搜索
还可以使用 * 只搜索单词的一部分,比如要查找以 good 开头的单词的所有文档:
ft.search post_index "good*"
复制代码
需要注意的是,这样做仅限于前缀,比如关键词是这样的话 *good,是不支持的。
模糊匹配
这个功能很强大,它是一种近似的搜索手段,使用 %。
假设你把想要查找的单词写错了,把 world 写成了 wold,它依然能查出来,比如:
ft.search post_index "%wold%"
复制代码
总结
最近在工作中遇到了一个问题,因为数据都存储在了 Redis 中,而且大部分功能都可以满足。但其中有一个接口需要模糊查询,这在 Redis 原生方法中是不容易的。
所以查找了一些资料,了解到 RediSearch,使用一下还是挺方便的,并且完美地解决了我的问题。也把这篇文章分享给大家,希望对大家有帮助。
以上就是本文的全部内容,如果觉得还不错的话欢迎
点赞
,
转发
和
关注
,感谢支持。
参考文章:
https://github.com/RediSearch
https://medium.com/datadenys/full-text-search-in-redis-using-redisearch-31df0deb4f3e
推荐阅读:
Go 语言切片是如何扩容的?
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
刘俊凯
金牌会员
这个人很懒什么都没写!
楼主热帖
IDEA中集成Git操作以及关于Git中分支说 ...
牛客SQL刷题第三趴——SQL大厂面试真题 ...
袋鼠云春季生长大会最新议程来啦!4月2 ...
SAP MM 使用两个STO实现免关税跨国公 ...
精心总结十三条建议,帮你创建更合适的 ...
github上fork2.4k,star8.7k的这款状态 ...
MySQL ——select语句 一条龙服务 ...
Linux基础篇(5)---》常用命令大全(压 ...
万字解析XML配置映射为BeanDefinition ...
0day安全:软件漏洞技术分析-Crack小实 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表