使用 RediSearch 在 Redis 中进行全文检索

这篇具有很好参考价值的文章主要介绍了使用 RediSearch 在 Redis 中进行全文检索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文链接: 使用 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:1post:2,其中包含的字段是 titlebody

创建索引

接下来创建索引:

FT.CREATE post_index prefix 1 post: SCHEMA title TEXT body text

在这里,我们创建了 post_index 索引,它将索引以 post: 前缀开头的所有 Redis 哈希键。只有 titlebody 字段才会被索引,并且索引立即生效。

搜索索引

使用 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 操作,比如要查找与 hellogoodbye 匹配的所有文档:

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

推荐阅读:文章来源地址https://www.toymoban.com/news/detail-624120.html

  • Go 语言切片是如何扩容的?

到了这里,关于使用 RediSearch 在 Redis 中进行全文检索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql全文检索使用

    数据库数据量10万左右,使用like \\\'%test%\\\'要耗费30秒左右,放弃该办法 使用mysql的全文检索 第一步:建立索引 首先修改一下设置: my.ini中ngram_token_size = 1 可以通过    show variables like \\\'%token%\\\';来查看 接下来建立索引:alter  table 表名 add fulltext titlefull (字段名) with parser ngram; 第二步

    2024年02月12日
    浏览(40)
  • MySQL使用全文检索实现模糊搜索

    创建全文检索有两种方式 方式一: 方法二: in boolean mode(布尔模式): 可以为检索的字符串增加操作符,且不会像自然语言一样自动拆词查询并集(除非手动空格隔开) 全文检索模糊查询使用全文索引来提高搜索效率,可以快速查询大数据量中的模糊匹配结果。而LIKE模糊查

    2024年02月15日
    浏览(49)
  • Java轻量级全文检索引擎Lucene使用及优化

    Lucene是一个开源的全文检索引擎工具包由Doug Cutting编写。它被设计用于实现全文搜索功能,即读入一堆文本文件并将其转换为易于搜索的数据结构。Lucene提供了一组简单而强大的API,使得索引和搜索过程变得非常方便。 Lucene广泛应用于从1200万站点中进行互联网搜索等搜索引

    2024年02月16日
    浏览(53)
  • pgsql_全文检索_使用空间换时间的方法支持中文搜索

    PostgreSQL 14.2, compiled by Visual C++ build 1914, 64-bit 提到全文检索首先想到的就是ES(ElasticSearch)和Lucene,专业且强大。对于一些小众场景对于搜索要求不高,数据量也不大的情况, 上ES等有些繁重,增加工作量还增加了后期运维成本。 PgSql也支持全文检索原理和ES一样,支持分词和反

    2024年02月04日
    浏览(38)
  • 全文检索-Elasticsearch-进阶检索

    本文记录谷粒商城高级篇的 Elasticsearch 进阶检索部分,续上之前记录的 Elasticsearch入门篇。 ES 支持两种基本方式检索 : 一个是通过使用 REST request URI 发送搜索参数(uri + 检索参数) 另一个是通过使用 REST request body 来发送它们(uri + 请求体) 请求体中写查询条件,语法: 示例

    2024年02月03日
    浏览(88)
  • 【全文检索】sqlite-fts4和pgsql的全文检索对比

    因为是Android项目,老系统中的全文检索是采用sqlite自带的fts4,然而后续由于地图要素全部转为线上,全文检索也需要同步在线查询,所以将整个全文检索的功能迁移到pgsql中。目前这块功能基本结束,这里来对两种全文检索方案做一个对比总结。 相比与fts5,fts4的好处是原生

    2024年02月05日
    浏览(46)
  • 全文检索-Es-初步检索(三)

    #为jmeter返回的结果 jmeter测试结果 请求头 http请求 put 返回结果 再次发送请求 post不带/带id保存 不带id 结果 二次请求结果 带id保存 结果 二次请求结果 结论 发送请求 查询-查看结果树 增加判断,确定是否修改 结果 查看修改是否成功 结果 更新文档 post/put带_update的请求(会比

    2024年02月14日
    浏览(43)
  • Elasticsearch 全文检索 分词检索-Elasticsearch文章四

    https://www.elastic.co/guide/en/enterprise-search/current/start.html https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-match-query.html Full text Query中,我们只需要把如下的那么多点分为3大类,你的体系能力会大大提升 很多api都可以查得到,我们只要大概知道有支持哪些功能 Elasticsearch 执行

    2024年02月14日
    浏览(52)
  • ElasticSearch-全文检索

    https://www.elastic.co/cn/what-is/elasticsearch 全文搜索属于最常见的需求,开源的Elasticsearch是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。 维基百科、StackOverflow、Github都采用它。 Elastic的底层是开源库Lucene。但是,你没法直接用Lucene,必须自己写代码去调用

    2024年04月17日
    浏览(38)
  • MySQL中文全文检索

    常规数据库搜索都是用 like 语句,但是like 语句是不能利用索引的,查询效率极其低下。这也就是为什么很多功能都只提供标题搜索的原因,因为如果搜索内容,几万数据就跑不动了。 Mysql 全文索引是专门为了解决模糊查询提供的,可以对整篇文章预先按照词进行索引,搜索

    2024年02月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包