0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis官方搜索引擎來(lái)了,性能炸裂!

jf_ro2CN3Fa ? 來(lái)源:waynblog ? 2024-02-21 10:01 ? 次閱讀

RediSearch 簡(jiǎn)介

RediSearch 是一個(gè) Redis 模塊,為 Redis 提供查詢(xún)、二級(jí)索引和全文搜索功能。

要使用 RediSearch 的功能,我們需要要先聲明一個(gè) index(類(lèi)似于 Elasticsearch 的索引)。然后就可以使用 RediSearch 的查詢(xún)語(yǔ)言來(lái)查詢(xún)?cè)撍饕碌臄?shù)據(jù)。

RediSearch 內(nèi)部使用壓縮的倒排索引,所以可以用較低的內(nèi)存占用來(lái)實(shí)現(xiàn)索引的快速構(gòu)建。

目前 RediSearch 最新版支持的查詢(xún)功能也比較豐富了,除了基本的文本分詞還支持聚合統(tǒng)計(jì)、停用詞、同義詞、拼寫(xiě)檢查、結(jié)果排序、標(biāo)簽查詢(xún)、向量相似度查詢(xún)以及中文分詞等。

對(duì)比 Elasticsearch

基本硬件

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

數(shù)據(jù)源

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

索引構(gòu)建測(cè)試

在官方提供的索引構(gòu)建測(cè)試中,RediSearch 用 221 秒的速度超過(guò)了 Elasticsearch 的 349 秒,領(lǐng)先 58%,

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

查詢(xún)性能測(cè)試

通過(guò)數(shù)據(jù)集導(dǎo)入索引數(shù)據(jù)后,官方使用運(yùn)行在專(zhuān)用負(fù)載生成器服務(wù)器上的 32 個(gè)客戶(hù)端啟動(dòng)了兩個(gè)詞的搜索查詢(xún)。

如下圖所示,RediSearch 的吞吐量達(dá)到了 12.5K ops/sec,而 Elasticsearch 的吞吐量只有了 3.1K ops/sec,快了 4 倍。此外 RediSearch 的延遲稍好一些,平均為 8 毫秒,而 Elasticsearch 為 10 毫秒。(ops/sec 每秒操作數(shù))

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

由此可見(jiàn),RediSearch 在性能上對(duì)比 RediSearch 有比較大的優(yōu)勢(shì)。

目前 RediSearch 已經(jīng)更新到 2.0+ 版本,根據(jù)官方對(duì)于 RediSearch 2.0 版本介紹,與 RediSearch 1.6 相比,吞吐量和延遲相關(guān)的指標(biāo)都提高了 2.4 倍。

RediSearch 安裝

對(duì)于目前最新的 RediSearch 2.0 版本來(lái)說(shuō),官方推薦直接使用 redis-stack-server 鏡像進(jìn)行進(jìn)行部署,也比較簡(jiǎn)單,

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

設(shè)置登錄密碼

//設(shè)置登錄密碼
dockerrun-eREDIS_ARGS="--requirepassredis-stack"redis/redis-stack:latest

通過(guò) 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 創(chuàng)建索引命令

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

FT.CREATE:創(chuàng)建索引命令

idx:goods:索引名稱(chēng)

on hash:索引關(guān)聯(lián)的數(shù)據(jù)類(lèi)型,這里指定索引基于 hash 類(lèi)型的源數(shù)據(jù)構(gòu)建

prefix 1 "goods:":表示索引關(guān)聯(lián)的 hash 類(lèi)型源數(shù)據(jù)前綴是 goods:

language chinese:表示支持中文語(yǔ)言分詞

schema goodsName text sortable:表示字段定義,goodsName 表示元數(shù)據(jù)屬性名,text 表示字段類(lèi)型 sortable 表示該字段可以用于排序

添加索引時(shí),直接使用 hset 命令添加一個(gè) key 前綴是 "goods:" 的源數(shù)據(jù)。如下,

hsetgoods:1001goodsName小米手機(jī)
hsetgoods:1002goodsName華為手機(jī)

FT.SEARCH 查詢(xún)索引

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

FT.INFO 查詢(xún)指定名稱(chēng)索引信息

>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 查詢(xún)指定名稱(chēng)的索引信息

FT.DROPINDEX 刪除索引名稱(chēng)

>FT.DROPINDEXidx:goods1
"OK"

FT.DROPINDEX 刪除指定名稱(chēng)索引,不會(huì)刪除 hash 類(lèi)型的源數(shù)據(jù)

如果需要?jiǎng)h除索引數(shù)據(jù),直接使用 del 命令刪除索引關(guān)聯(lián)的源數(shù)據(jù)即可。

Java 使用 RediSearch

對(duì)于 Java 項(xiàng)目直接選用 Jedis4.0 以上版本就可以使用 RediSearch 提供的搜索功能,Jedis 在 4.0 以上版本自動(dòng)支持 RediSearch,編寫(xiě) Jedis 連接 RedisSearch 測(cè)試用例,用 RedisSearch 命令創(chuàng)建如下,

Jedis 創(chuàng)建 RediSearch 客戶(hù)端

@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 創(chuàng)建索引

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

Jedis 添加索引源數(shù)據(jù)

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

Jedis 中文查詢(xún)

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

}
//設(shè)置中文分詞查詢(xún)
q.setLanguage("chinese");
//設(shè)置分頁(yè)
q.limit((int)page.offset(),(int)page.getSize());
//返回查詢(xún)結(jié)果
returnclient.ftSearch(goodsIdxName,q);
}

最后聊兩句

RediSearch 是這幾年新出的一個(gè)全文搜索引擎,借助于 Redis 的成功,RediSearch 一出場(chǎng)就獲得了較高的關(guān)注度。

目前來(lái)看,我個(gè)人使用 RediSearch 作為項(xiàng)目的全文搜索引擎已經(jīng)夠用了,它有易于安裝、索引占用內(nèi)存低、查詢(xún)速度快等許多優(yōu)點(diǎn)。不過(guò)在對(duì) Redis 集群的支持上,RediSearch 目前只針對(duì) Redis 企業(yè)版有解決方案,開(kāi)源版還沒(méi)有,這一點(diǎn)需要告訴大家。

如果想要在生產(chǎn)環(huán)境大規(guī)模使用,我還是不太建議的。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    315

    瀏覽量

    21011
  • Hash
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    13200
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    375

    瀏覽量

    10878

原文標(biāo)題:換掉ES!Redis官方搜索引擎來(lái)了,性能炸裂!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    阿里國(guó)際推出全球首個(gè)B2B AI搜索引擎Accio

    近日,在歐洲科技峰會(huì)Web Summit上,阿里國(guó)際正式推出了全球首個(gè)B2B領(lǐng)域的AI搜索引擎——Accio。這一創(chuàng)新產(chǎn)品面向全球商家開(kāi)放,標(biāo)志著阿里國(guó)際正式入局當(dāng)前備受矚目的AI Search賽道。
    的頭像 發(fā)表于 11-15 16:53 ?701次閱讀

    Meta開(kāi)發(fā)新搜索引擎,減少對(duì)谷歌和必應(yīng)的依賴(lài)

    近日,Meta正在積極進(jìn)軍人工智能領(lǐng)域,并試圖跟上OpenAI的發(fā)展步伐。為實(shí)現(xiàn)這一目標(biāo),Meta正在開(kāi)發(fā)一款全新的搜索引擎,該搜索引擎具備網(wǎng)絡(luò)爬蟲(chóng)功能,能夠?yàn)橛脩?hù)提供有關(guān)時(shí)事的對(duì)話答案,而這些答案
    的頭像 發(fā)表于 10-29 11:49 ?385次閱讀

    月訪問(wèn)量超2億,增速113%!360AI搜索成為全球增速最快的AI搜索引擎

    與傳統(tǒng)搜索引擎不同,作為AI原生搜索引擎的360AI搜索基于公開(kāi)網(wǎng)絡(luò)、知識(shí)庫(kù)、大模型三大支柱。借助首創(chuàng)的 CoE 技術(shù)架構(gòu),360AI搜索整合了國(guó)內(nèi)主流的16家廠商51款大模型,支持用
    的頭像 發(fā)表于 09-09 13:44 ?478次閱讀
    月訪問(wèn)量超2億,增速113%!360AI<b class='flag-5'>搜索</b>成為全球增速最快的AI<b class='flag-5'>搜索引擎</b>

    OpenAI推出SearchGPT原型,正式向Google搜索引擎發(fā)起挑戰(zhàn)

    在人工智能領(lǐng)域的持續(xù)探索中,OpenAI 邁出了重大一步,發(fā)布了其最新的 SearchGPT 原型,直接瞄準(zhǔn)了 Google 的核心業(yè)務(wù)——搜索引擎。這一舉動(dòng)不僅標(biāo)志著 OpenAI 在技術(shù)上的又一次飛躍,也預(yù)示著搜索引擎市場(chǎng)即將迎來(lái)一場(chǎng)前所未有的變革。
    的頭像 發(fā)表于 07-26 15:11 ?580次閱讀

    微軟計(jì)劃在搜索引擎Bing中引入AI摘要功能

    近期,科技界傳來(lái)新動(dòng)向,微軟緊隨百度與谷歌的步伐,宣布計(jì)劃在其搜索引擎Bing中引入先進(jìn)的AI摘要功能,旨在為用戶(hù)帶來(lái)更加智能、豐富的搜索體驗(yàn)。
    的頭像 發(fā)表于 07-26 14:23 ?469次閱讀

    新火種AI|谷歌推出AI搜索引擎惹得出版商擔(dān)憂!新聞流量的至暗時(shí)刻要來(lái)了嗎?

    作者:小巖 編輯:彩云 在數(shù)字化浪潮的推動(dòng)下,AI技術(shù)正逐漸滲透到我們生活的方方面面。最近,谷歌宣布推出一款全新的AI搜索引擎,這在使我們見(jiàn)識(shí)到了科技巨頭所擁有的超能力和“鈔”能力的同時(shí),也讓我們
    的頭像 發(fā)表于 05-17 09:40 ?355次閱讀
    新火種AI|谷歌推出AI<b class='flag-5'>搜索引擎</b>惹得出版商擔(dān)憂!新聞流量的至暗時(shí)刻要<b class='flag-5'>來(lái)了</b>嗎?

    OpenAI否認(rèn)將推出搜索產(chǎn)品或GPT-5

    此消息對(duì)致力于將ChatGPT嵌入必應(yīng)搜索引擎的微軟或許有所積極影響。早期已有報(bào)導(dǎo)披露,該AI企業(yè)有意研發(fā)競(jìng)品以抗衡谷歌搜索引擎
    的頭像 發(fā)表于 05-13 15:14 ?388次閱讀

    OpenAI注冊(cè)新域名,準(zhǔn)備推出結(jié)合AI技術(shù)的搜索引擎挑戰(zhàn)谷歌

    OpenAI最近注冊(cè)了“search.chatgpt.com”域名,看起來(lái)是要推出一款新的搜索引擎。
    的頭像 發(fā)表于 05-08 10:41 ?461次閱讀

    OpenAI或?qū)⑼瞥鯟hatGPT搜索引擎

    據(jù)可靠消息透露,OpenAI正秘密研發(fā)一款以ChatGPT為基礎(chǔ)的大型產(chǎn)品,其核心功能將是一款新型搜索引擎,旨在為用戶(hù)提供更便捷的上網(wǎng)體驗(yàn)。
    的頭像 發(fā)表于 05-08 10:19 ?505次閱讀

    新火種AI|挑戰(zhàn)谷歌,OpenAI要推出搜索引擎?

    新的搜索引擎,幫助用書(shū)輕松上網(wǎng)。 OpenAI的這一動(dòng)向引起了業(yè)界的廣泛關(guān)注。作為OpenAI開(kāi)發(fā)的一款強(qiáng)大的AI大語(yǔ)言模型,ChatGPT已經(jīng)在自然語(yǔ)言處理的領(lǐng)域取得了顯著的成果,并給了人們?nèi)碌墨@取信息的體驗(yàn)。因此,自誕生以來(lái),ChatGPT一直都被不少人視為能夠給予谷歌
    的頭像 發(fā)表于 05-07 22:06 ?364次閱讀
    新火種AI|挑戰(zhàn)谷歌,OpenAI要推出<b class='flag-5'>搜索引擎</b>?

    OpenAI或?qū)⒃?月9日發(fā)布ChatGPT版搜索引擎

    OpenAI可能即將與谷歌展開(kāi)正面競(jìng)爭(zhēng),推出基于ChatGPT的搜索引擎。根據(jù)Reddit網(wǎng)友的最新爆料,OpenAI有望在5月9日公布其全新的搜索產(chǎn)品。據(jù)悉,與這一新產(chǎn)品相對(duì)應(yīng)的搜索網(wǎng)頁(yè)search.chatgpt.com的域
    的頭像 發(fā)表于 05-07 09:28 ?630次閱讀

    潤(rùn)和軟件與新財(cái)富聯(lián)合發(fā)布金融AI對(duì)話式搜索引擎“金融搜一搜”產(chǎn)品

    3月29日,新財(cái)富投顧嘉年華活動(dòng)中,江蘇潤(rùn)和軟件股份有限公司(以下簡(jiǎn)稱(chēng)“潤(rùn)和軟件”)與深圳市新財(cái)富數(shù)字科技有限責(zé)任公司(以下簡(jiǎn)稱(chēng)“新財(cái)富”)聯(lián)合發(fā)布了金融AI對(duì)話式搜索引擎——“金融搜一搜”產(chǎn)品,助力金融投資場(chǎng)景智能化升級(jí)。
    的頭像 發(fā)表于 04-02 10:15 ?498次閱讀
    潤(rùn)和軟件與新財(cái)富聯(lián)合發(fā)布金融AI對(duì)話式<b class='flag-5'>搜索引擎</b>“金融搜一搜”產(chǎn)品

    微軟向Windows 10/11推送更新,建議將Bing設(shè)為Chrome默認(rèn)搜索引擎

    微軟通過(guò)提示窗口表示,只要將Bing設(shè)為Chrome瀏覽器的默認(rèn)搜索引擎,即可免費(fèi)享用ChatGPT-4,且每天可與Bing人工智能進(jìn)行數(shù)百次的對(duì)話交流。
    的頭像 發(fā)表于 03-15 14:32 ?1356次閱讀

    生成式AI恐使搜索引擎衰退,預(yù)計(jì)2026年搜索量將下滑25%

    據(jù)市場(chǎng)分析機(jī)構(gòu)Gartner報(bào)道,生成式AI對(duì)傳統(tǒng)搜索引擎構(gòu)成重大威脅,預(yù)計(jì)至2026年搜索量將降低25%。為此,企業(yè)需調(diào)整營(yíng)銷(xiāo)策略。
    的頭像 發(fā)表于 02-20 10:04 ?707次閱讀

    谷歌搜索引擎優(yōu)化的各個(gè)方面和步驟

    谷歌搜索引擎是最受歡迎和廣泛使用的搜索引擎之一,為了使你的網(wǎng)站在谷歌上更好地排名并提高曝光度,你可以采取一些谷歌搜索引擎優(yōu)化的步驟。 使用關(guān)鍵字研究工具,如Google AdWords關(guān)鍵字規(guī)劃工具
    的頭像 發(fā)表于 01-25 10:29 ?889次閱讀