0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Redis官方搜索引擎来了,性能炸裂!

jf_ro2CN3Fa 来源:waynblog 2024-02-21 10:01 次阅读

RediSearch 简介

RediSearch 是一个 Redis 模块,为 Redis 提供查询、二级索引和全文搜索功能。

要使用 RediSearch 的功能,我们需要要先声明一个 index(类似于 Elasticsearch 的索引)。然后就可以使用 RediSearch 的查询语言来查询该索引下的数据。

RediSearch 内部使用压缩的倒排索引,所以可以用较低的内存占用来实现索引的快速构建。

目前 RediSearch 最新版支持的查询功能也比较丰富了,除了基本的文本分词还支持聚合统计、停用词、同义词、拼写检查、结果排序、标签查询、向量相似度查询以及中文分词等。

对比 Elasticsearch

基本硬件

f591b788-d059-11ee-a297-92fbcf53809c.png

数据源

f597dbd6-d059-11ee-a297-92fbcf53809c.png

RediSearch 配置

f59d903a-d059-11ee-a297-92fbcf53809c.png

Elasticsearch 配置

f5a6d76c-d059-11ee-a297-92fbcf53809c.png

版本

f5af12c4-d059-11ee-a297-92fbcf53809c.png

索引构建测试

在官方提供的索引构建测试中,RediSearch 用 221 秒的速度超过了 Elasticsearch 的 349 秒,领先 58%,

f5b4db00-d059-11ee-a297-92fbcf53809c.png

查询性能测试

通过数据集导入索引数据后,官方使用运行在专用负载生成器服务器上的 32 个客户端启动了两个词的搜索查询。

如下图所示,RediSearch 的吞吐量达到了 12.5K ops/sec,而 Elasticsearch 的吞吐量只有了 3.1K ops/sec,快了 4 倍。此外 RediSearch 的延迟稍好一些,平均为 8 毫秒,而 Elasticsearch 为 10 毫秒。(ops/sec 每秒操作数)

f5c08bc6-d059-11ee-a297-92fbcf53809c.png

由此可见,RediSearch 在性能上对比 RediSearch 有比较大的优势。

目前 RediSearch 已经更新到 2.0+ 版本,根据官方对于 RediSearch 2.0 版本介绍,与 RediSearch 1.6 相比,吞吐量和延迟相关的指标都提高了 2.4 倍。

RediSearch 安装

对于目前最新的 RediSearch 2.0 版本来说,官方推荐直接使用 redis-stack-server 镜像进行进行部署,也比较简单,

dockerrun-d--nameredis-stack-server-p6379:6379redis/redis-stack-server:latest

设置登录密码

//设置登录密码
dockerrun-eREDIS_ARGS="--requirepassredis-stack"redis/redis-stack:latest

通过 redis-cli 连接查看 RediSearch 是否安装了 search 模块,

redis-cli-hlocalhost

>MODULElist
...
3)1)"name"
2)"search"
3)"ver"
4)"20809"
5)"path"
6)"/opt/redis-stack/lib/redisearch.so"
7)"args"
8)1)"MAXSEARCHRESULTS"
2)"10000"
3)"MAXAGGREGATERESULTS"
4)"10000"
...

索引操作

FT.CREATE 创建索引命令

>FT.CREATEidx:goodsonhashprefix1"goods:"languagechineseschemagoodsNametextsortable
"OK"

FT.CREATE:创建索引命令

idx:goods:索引名称

on hash:索引关联的数据类型,这里指定索引基于 hash 类型的源数据构建

prefix 1 "goods:":表示索引关联的 hash 类型源数据前缀是 goods:

language chinese:表示支持中文语言分词

schema goodsName text sortable:表示字段定义,goodsName 表示元数据属性名,text 表示字段类型 sortable 表示该字段可以用于排序

添加索引时,直接使用 hset 命令添加一个 key 前缀是 "goods:" 的源数据。如下,

hsetgoods:1001goodsName小米手机
hsetgoods:1002goodsName华为手机

FT.SEARCH 查询索引

>FT.SEARCHidx:goods1"手机"
1)"2"
2)"goods:1001"
3)1)"goodsName"
2)"xe5xb0x8fxe7xb1xb3xe6x89x8bxe6x9cxba"
4)"goods:1002"
5)1)"goodsName"
2)"xe5x8dx8exe4xb8xbaxe6x89x8bxe6x9cxba"

FT.INFO 查询指定名称索引信息

>FT.INFOidx:goods
1)"index_name"
2)"idx:goods1"
3)"index_options"
4)(emptylistorset)
5)"index_definition"
6)1)"key_type"
2)"HASH"
3)"prefixes"
4)1)"goods:"
5)"default_language"
6)"chinese"
7)"default_score"
8)"1"
7)"attributes"
8)1)1)"identifier"
2)"goodsName"
3)"attribute"
4)"goodsName"
5)"type"
6)"TEXT"
7)"WEIGHT"
8)"1"
9)"SORTABLE"
...

FT.INFO 查询指定名称的索引信息

FT.DROPINDEX 删除索引名称

>FT.DROPINDEXidx:goods1
"OK"

FT.DROPINDEX 删除指定名称索引,不会删除 hash 类型的源数据

如果需要删除索引数据,直接使用 del 命令删除索引关联的源数据即可。

Java 使用 RediSearch

对于 Java 项目直接选用 Jedis4.0 以上版本就可以使用 RediSearch 提供的搜索功能,Jedis 在 4.0 以上版本自动支持 RediSearch,编写 Jedis 连接 RedisSearch 测试用例,用 RedisSearch 命令创建如下,

Jedis 创建 RediSearch 客户端

@Bean
publicUnifiedJedisunifiedJedis(GenericObjectPoolConfigjedisPoolConfig){
UnifiedJedisclient;
if(StringUtils.isNotEmpty(password)){
client=newJedisPooled(jedisPoolConfig,host,port,timeout,password,database);
}else{
client=newJedisPooled(jedisPoolConfig,host,port,timeout,null,database);
}
returnclient;
}

Jedis 创建索引

Schemaschema=newSchema()
.addSortableTextField("goodsName",1.0)
.addSortableTagField("tag","|");
IndexDefinitionrule=newIndexDefinition(IndexDefinition.Type.HASH)
.setPrefixes("idx:goods")
.setLanguage("chinese");#设置支持中文分词
client.ftCreate(idxName,
IndexOptions.defaultOptions().setDefinition(rule),
schema);

Jedis 添加索引源数据

publicbooleanaddGoodsIndex(StringkeyPrefix,Goodsgoods){
Maphash=MyBeanUtil.toMap(goods);
hash.put("_language","chinese");
client.hset("idx:goods"+goods.getGoodsId(),MyBeanUtil.toMap(goods));
returntrue;
}

Jedis 中文查询

publicSearchResultsearch(StringgoodsIdxName,SearchObjVOsearchObjVO,Pagepage){
//查询关键字
Stringkeyword=searchObjVO.getKeyword();
StringqueryKey=String.format("@goodsName:(%s)",keyword);
Queryq=newQuery(queryKey);
Stringsort=searchObjVO.getSidx();
Stringorder=searchObjVO.getOrder();
//查询是否排序
if(StringUtils.isNotBlank(sort)){
q.setSortBy(sort,Constants.SORT_ASC.equals(order));

}
//设置中文分词查询
q.setLanguage("chinese");
//设置分页
q.limit((int)page.offset(),(int)page.getSize());
//返回查询结果
returnclient.ftSearch(goodsIdxName,q);
}

最后聊两句

RediSearch 是这几年新出的一个全文搜索引擎,借助于 Redis 的成功,RediSearch 一出场就获得了较高的关注度。

目前来看,我个人使用 RediSearch 作为项目的全文搜索引擎已经够用了,它有易于安装、索引占用内存低、查询速度快等许多优点。不过在对 Redis 集群的支持上,RediSearch 目前只针对 Redis 企业版有解决方案,开源版还没有,这一点需要告诉大家。

如果想要在生产环境大规模使用,我还是不太建议的。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 生成器
    +关注

    关注

    7

    文章

    314

    浏览量

    20992
  • Hash
    +关注

    关注

    0

    文章

    32

    浏览量

    13190
  • Redis
    +关注

    关注

    0

    文章

    371

    浏览量

    10867

原文标题:换掉ES!Redis官方搜索引擎来了,性能炸裂!

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    阿里国际推出全球首个B2B AI搜索引擎Accio

    近日,在欧洲科技峰会Web Summit上,阿里国际正式推出了全球首个B2B领域的AI搜索引擎——Accio。这一创新产品面向全球商家开放,标志着阿里国际正式入局当前备受瞩目的AI Search赛道。
    的头像 发表于 11-15 16:53 675次阅读

    Meta开发新搜索引擎,减少对谷歌和必应的依赖

    近日,Meta正在积极进军人工智能领域,并试图跟上OpenAI的发展步伐。为实现这一目标,Meta正在开发一款全新的搜索引擎,该搜索引擎具备网络爬虫功能,能够为用户提供有关时事的对话答案,而这些答案
    的头像 发表于 10-29 11:49 354次阅读

    月访问量超2亿,增速113%!360AI搜索成为全球增速最快的AI搜索引擎

    与传统搜索引擎不同,作为AI原生搜索引擎的360AI搜索基于公开网络、知识库、大模型三大支柱。借助首创的 CoE 威廉希尔官方网站 架构,360AI搜索整合了国内主流的16家厂商51款大模型,支持用
    的头像 发表于 09-09 13:44 441次阅读
    月访问量超2亿,增速113%!360AI<b class='flag-5'>搜索</b>成为全球增速最快的AI<b class='flag-5'>搜索引擎</b>

    OpenAI推出SearchGPT原型,正式向Google搜索引擎发起挑战

    在人工智能领域的持续探索中,OpenAI 迈出了重大一步,发布了其最新的 SearchGPT 原型,直接瞄准了 Google 的核心业务——搜索引擎。这一举动不仅标志着 OpenAI 在威廉希尔官方网站 上的又一次飞跃,也预示着搜索引擎市场即将迎来一场前所未有的变革。
    的头像 发表于 07-26 15:11 564次阅读

    微软计划在搜索引擎Bing中引入AI摘要功能

    近期,科技界传来新动向,微软紧随百度与谷歌的步伐,宣布计划在其搜索引擎Bing中引入先进的AI摘要功能,旨在为用户带来更加智能、丰富的搜索体验。
    的头像 发表于 07-26 14:23 447次阅读

    新火种AI|谷歌推出AI搜索引擎惹得出版商担忧!新闻流量的至暗时刻要来了吗?

    作者:小岩 编辑:彩云 在数字化浪潮的推动下,AI威廉希尔官方网站 正逐渐渗透到我们生活的方方面面。最近,谷歌宣布推出一款全新的AI搜索引擎,这在使我们见识到了科技巨头所拥有的超能力和“钞”能力的同时,也让我们
    的头像 发表于 05-17 09:40 341次阅读
    新火种AI|谷歌推出AI<b class='flag-5'>搜索引擎</b>惹得出版商担忧!新闻流量的至暗时刻要<b class='flag-5'>来了</b>吗?

    OpenAI否认将推出搜索产品或GPT-5

    此消息对致力于将ChatGPT嵌入必应搜索引擎的微软或许有所积极影响。早期已有报导披露,该AI企业有意研发竞品以抗衡谷歌搜索引擎
    的头像 发表于 05-13 15:14 379次阅读

    OpenAI注册新域名,准备推出结合AI威廉希尔官方网站 的搜索引擎挑战谷歌

    OpenAI最近注册了“search.chatgpt.com”域名,看起来是要推出一款新的搜索引擎
    的头像 发表于 05-08 10:41 452次阅读

    OpenAI或将推出ChatGPT搜索引擎

    据可靠消息透露,OpenAI正秘密研发一款以ChatGPT为基础的大型产品,其核心功能将是一款新型搜索引擎,旨在为用户提供更便捷的上网体验。
    的头像 发表于 05-08 10:19 482次阅读

    新火种AI|挑战谷歌,OpenAI要推出搜索引擎

    新的搜索引擎,帮助用书轻松上网。 OpenAI的这一动向引起了业界的广泛关注。作为OpenAI开发的一款强大的AI大语言模型,ChatGPT已经在自然语言处理的领域取得了显著的成果,并给了人们全新的获取信息的体验。因此,自诞生以来,ChatGPT一直都被不少人视为能够给予谷歌
    的头像 发表于 05-07 22:06 355次阅读
    新火种AI|挑战谷歌,OpenAI要推出<b class='flag-5'>搜索引擎</b>?

    OpenAI或将在5月9日发布ChatGPT版搜索引擎

    OpenAI可能即将与谷歌展开正面竞争,推出基于ChatGPT的搜索引擎。根据Reddit网友的最新爆料,OpenAI有望在5月9日公布其全新的搜索产品。据悉,与这一新产品相对应的搜索网页search.chatgpt.com的域
    的头像 发表于 05-07 09:28 612次阅读

    润和软件与新财富联合发布金融AI对话式搜索引擎“金融搜一搜”产品

    3月29日,新财富投顾嘉年华活动中,江苏润和软件股份有限公司(以下简称“润和软件”)与深圳市新财富数字科技有限责任公司(以下简称“新财富”)联合发布了金融AI对话式搜索引擎——“金融搜一搜”产品,助力金融投资场景智能化升级。
    的头像 发表于 04-02 10:15 468次阅读
    润和软件与新财富联合发布金融AI对话式<b class='flag-5'>搜索引擎</b>“金融搜一搜”产品

    微软向Windows 10/11推送更新,建议将Bing设为Chrome默认搜索引擎

    微软通过提示窗口表示,只要将Bing设为Chrome浏览器的默认搜索引擎,即可免费享用ChatGPT-4,且每天可与Bing人工智能进行数百次的对话交流。
    的头像 发表于 03-15 14:32 1325次阅读

    生成式AI恐使搜索引擎衰退,预计2026年搜索量将下滑25%

    据市场分析机构Gartner报道,生成式AI对传统搜索引擎构成重大威胁,预计至2026年搜索量将降低25%。为此,企业需调整营销策略。
    的头像 发表于 02-20 10:04 680次阅读

    谷歌搜索引擎优化的各个方面和步骤

    谷歌搜索引擎是最受欢迎和广泛使用的搜索引擎之一,为了使你的网站在谷歌上更好地排名并提高曝光度,你可以采取一些谷歌搜索引擎优化的步骤。 使用关键字研究工具,如Google AdWords关键字规划工具
    的头像 发表于 01-25 10:29 859次阅读