免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

換掉ES!Redis官方搜索引擎來了,效率大幅提升

:2024年11月20日 Java面試那些事兒
分享到:

RediSearch是一個快速且高效的Redis模塊,用于實(shí)現(xiàn)文檔的全文索引。與Elasticsearch相比,RediSearch構(gòu)建索引的時間少58%,并且只用了201秒就構(gòu)建了索引。

來源:zhuanlan.zhihu.com/p/687400704

RediSearch是一個Redis模塊,為Redis提供查詢、二次索引和全文搜索。要使用RediSearch,首先要在Redis數(shù)據(jù)上聲明索引。然后可以使用重新搜索查詢語言來查詢該數(shù)據(jù)。

RedSearch使用壓縮的反向索引進(jìn)行快速索引,占用內(nèi)存少。RedSearch索引通過提供精確的短語匹配、模糊搜索和數(shù)字過濾等功能增強(qiáng)了

# 實(shí)現(xiàn)特性

  • 基于文檔的多個字段全文索引

  • 高性能增量索引

  • 文檔排序(由用戶在索引時手動提供)

  • 在子查詢之間使用 AND 或 NOT 操作符的復(fù)雜布爾查詢

  • 可選的查詢子句

  • 基于前綴的搜索

  • 支持字段權(quán)重設(shè)置

  • 自動完成建議(帶有模糊前綴建議)

  • 精確的短語搜索

  • 在許多語言中基于詞干分析的查詢擴(kuò)展

  • 支持用于查詢擴(kuò)展和評分的自定義函數(shù)

  • 將搜索限制到特定的文檔字段

  • 數(shù)字過濾器和范圍

  • 使用 Redis 自己的地理命令進(jìn)行地理過濾

  • Unicode 支持(需要 UTF-8 字符集)

  • 檢索完整的文檔內(nèi)容或只是ID 的檢索

  • 支持文檔刪除和更新與索引垃圾收集

  • 支持部分更新和條件文檔更新

# 對比 Elasticsearch

如下圖所示,RediSearch 構(gòu)建索引的時間為 221 秒,而 Elasticsearch 為 349 秒,快了 58%。

# 索引構(gòu)建測試

我們模擬了一個多租戶電子商務(wù)應(yīng)用程序,其中每個租戶代表一個產(chǎn)品類別并維護(hù)自己的索引。對于此基準(zhǔn)測試,我們構(gòu)建了 50K 個索引(或產(chǎn)品),每個索引最多存儲 500 個文檔(或項(xiàng)目),總共 2500 萬個文檔。

RediSearch 僅用了 201 秒就構(gòu)建了索引,平均每秒運(yùn)行 125K 個索引。然而,Elasticsearch 在 921 個索引后崩潰了,顯然它不是為應(yīng)對這種負(fù)載而設(shè)計(jì)的。

# 查詢性能測試

一旦數(shù)據(jù)集被索引,我們就使用在專用負(fù)載生成器服務(wù)器上運(yùn)行的 32 個客戶端啟動兩個單詞的搜索查詢。如下圖所示,RediSearch 吞吐量達(dá)到了 12.5K 操作/秒,而 Elasticsearch 為 3.1K 操作/秒,速度提高了 4 倍。

此外,RediSearch 延遲稍好一些,平均為 8 毫秒,而 Elasticsearch 為 10 毫秒。

# 安裝

安裝目前分為源碼和docker安裝兩種方式。

源碼安裝

git clone https://github.com/RediSearch/RediSearch.git

cd RediSearch # 進(jìn)入模塊目錄

make setup

make install

docker安裝

note: RediSearch的安裝比較復(fù)雜原包無法進(jìn)行編譯操作所以我們使用docker安裝

docker run -p 6379:6379 redislabs/redisearch:latest

判斷是否安裝成功

127.0.0.1:0>module list

1) 1) "name"

2) "ReJSON"

3) "ver"

4) "20007"

2) 1) "name"

2) "search"

3) "ver"

4) "20209"

返回數(shù)組存在“ft”或 “search”(不同版本),表明 RediSearch 模塊已經(jīng)成功加載。

# 命令行操作

1、創(chuàng)建

1.1 創(chuàng)建索引

創(chuàng)建索引不妨想象成創(chuàng)建表結(jié)構(gòu),表一般基本屬性有表名、字段和字段類別等,所以我們可以考慮將索引名代表表名,字段代表字段,屬性即表示屬性。

xxx.xxx.xxx.xxx:0>ft.create "student" schema "name" text weight 5.0 "sex" text "desc" text "class" tag

"OK"

student 表示索引名,name、sex、desc表示字段,text表示類型(這樣表示只是為了便于理解)

“weight”為權(quán)重,默認(rèn)值為 1.0

type student

"none"

我們創(chuàng)建的索引redis是不認(rèn)識的,這證明使用的是插件。

1.2 創(chuàng)建文檔

創(chuàng)建文檔上下文的過程不妨想想成向表中插入數(shù)據(jù),這里請注意字段名可以使用雙引號但切記一定要用英文,這里之所以著重提出是因?yàn)橛行┚幾g器中文雙引號和英文雙引號用肉眼實(shí)在難以辨認(rèn)否則會出現(xiàn) “Fields must be specified in FIELD VALUE pairs”(其實(shí)是將“ 當(dāng)作內(nèi)容處理了以至于缺少了字段)

ft.add student 001 1.0 language "chinese" fields name "張三" sex "男" desc "這是一個學(xué)生" class "一班"

"OK"

其中001為文檔ID,"1.0"為評分缺少此值會報"Could not parse document score"異常,language 指明使用的語言默認(rèn)是英文編碼 如果沒有此標(biāo)記存儲是沒有問題的但不可以通過中文字符查詢

1.3 查詢

1.3.1 基本查詢

1.3.1.1 全量查詢

xxx.xxx.xxx.xxx:0>FT.SEARCH student * SORTBY sex desc RETURN 3 name sex desc

1) "2"

2) "001"

3) 1) "name"

2) "張三"

3) "sex"

4) "男"

5) "desc"

6) "這是一個學(xué)生"

4) "002"

5) 1) "name"

2) "張三"

3) "sex"

4) "男"

5) "desc"

6) "這是一個學(xué)生"

1.3.1.2 匹配查詢

xxx.xxx.xxx.xxx:0>ft.search student "張三" limit 0 10 RETURN 3 name sex desc

1) "2"

2) "001"

3) 1) "name"

2) "張三"

3) "sex"

4) "男"

5) "desc"

6) "這是一個學(xué)生"

4) "002"

5) 1) "name"

2) "張三"

3) "sex"

4) "男"

5) "desc"

6) "這是一個學(xué)生"

limit 與mysql相識主要用于分頁,此處是全量匹配,如果沒有設(shè)置language “chinese” 此處查詢?yōu)?,

1.3.2 模糊匹配

1.3.2.1 后置匹配

ft.search student "李*"  SORTBY sex desc RETURN 3 name sex desc

1) "1"

2) "003"

3) 1) "name"

2) "李四"

3) "sex"

4) "男"

5) "desc"

6) "這是一個學(xué)生"

1.3.2.2 模糊搜索

xxx.xxx.xxx.xxx:0>FT.SEARCH beers "%%張店%%"

1) "1"

2) "beer:1"

3) 1) "name"

2) "集團(tuán)本部已發(fā)布【文明就餐公約】,2號樓辦公人員午餐的就餐時間是11:45~13:00,現(xiàn)經(jīng)行政服務(wù)部進(jìn)行抽查,發(fā)現(xiàn)我們部門有員工違規(guī)就餐現(xiàn)象。請大家務(wù)必遵守,相互轉(zhuǎn)告,對于外地回到集團(tuán)辦公的同事,亦請遵守,謝謝!"

3) "org"

4) "山東省淄博市張店區(qū)"

5) "school"

6) "山東理工大學(xué)"

別高興太早全量模糊匹配是由很大限制的,他基于Levenshtein距離(LD)進(jìn)行模糊匹配。術(shù)語的模糊匹配是通過在術(shù)語周圍加“%”來實(shí)現(xiàn)的,模糊匹配的最大LD為3,確切的說這只是一種相識度查詢,并非一般意義上的模糊搜索,但是如果仔細(xì)觀察會發(fā)現(xiàn)通過精確匹配時不僅能夠?qū)⑼暾鹶alue值查詢出來而且還查詢出其他處于文檔某個位置的key請看官方提供的一個例子:

FT.CREATE idx SCHEMA txt TEXT

FT.ADD idx docCn 1.0 LANGUAGE chinese FIELDS txt

Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層樹復(fù)制。從盤可以有意無意的對數(shù)據(jù)進(jìn)行寫操作。

由于完全實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制,使得從數(shù)據(jù)庫在任何地方同步樹時,可訂閱一個頻道并接收主服務(wù)器完整的消息發(fā)布記錄。同步對讀取操作的可擴(kuò)展性和數(shù)據(jù)冗余很有幫助。

FT.CREATE idx SCHEMA txt TEXT

FT.ADD idx docCn 1.0 LANGUAGE chinese FIELDS txt "Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層樹復(fù)制。從盤可以有意無意的對數(shù)據(jù)進(jìn)行寫操作。由于完全實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制,使得從數(shù)據(jù)庫在任何地方同步樹時,可訂閱一個頻道并接收主服務(wù)器完整的消息發(fā)布記錄。同步對讀取操作的可擴(kuò)展性和數(shù)據(jù)冗余很有幫助。[8]"

FT.SEARCH idx "數(shù)據(jù)" LANGUAGE chinese HIGHLIGHT SUMMARIZE

# Outputs:

# 數(shù)據(jù)?... 數(shù)據(jù)進(jìn)行寫操作。由于完全實(shí)現(xiàn)了發(fā)布... 數(shù)據(jù)冗余很有幫助。[8...

之所以會出現(xiàn)這樣的效果是因?yàn)閞edisearch對文本進(jìn)行了分詞,其使用的工具是friso相比es的ik還是弱一些前者主要是對中文分詞,體積小可移植性強(qiáng)。

從而我們可以結(jié)合后后置匹配算法

xxx.xxx.xxx.xxx:0>FT.SEARCH idx "數(shù)*" LANGUAGE chinese HIGHLIGHT

1) "1"

2) "docCn"

3) 1) "txt"

2) "Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層樹復(fù)制。從盤可以有意無意的對數(shù)據(jù)進(jìn)行寫操作。由于完全實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制,使得從數(shù)據(jù)庫在任何地方同步樹時,可訂閱一個頻道并接收主服務(wù)器完整的消息發(fā)布記錄。同步對讀取操作的可擴(kuò)展性和數(shù)據(jù)冗余很有幫助。[8]"

或者結(jié)合Levenshtein算法這樣基本上能夠滿足業(yè)務(wù)查詢需求

xxx.xxx.xxx.xxx:0>FT.SEARCH idx "%%單的樹%%" LANGUAGE chinese HIGHLIGHT

1) "1"

2) "docCn"

3) 1) "txt"

2) "Redis支持主從同步。數(shù)據(jù)可以從主服務(wù)器向任意數(shù)量的從服務(wù)器上同步,從服務(wù)器可以是關(guān)聯(lián)其他從服務(wù)器的主服務(wù)器。這使得Redis可執(zhí)行單層復(fù)制。從盤可以有意無意的對數(shù)據(jù)進(jìn)行寫操作。由于完全實(shí)現(xiàn)了發(fā)布/訂閱機(jī)制,使得從數(shù)據(jù)庫在任何地方同步時,可訂閱一個頻道并接收主服務(wù)器完整的消息發(fā)布記錄。同步對讀取操作的可擴(kuò)展性和數(shù)據(jù)冗余很有幫助。[8]"

1.3.2.3 字段查詢

通過字段查詢也可以實(shí)現(xiàn)模糊搜索,直接給例子,后面跟著官網(wǎng)上給的sql 和 redisearch的對照表

ft.search student *

1) "2"

2) "doudou"

3) 1) "name"

2) "豆豆"

3) "jtzz"

4) "“檢索”是很多產(chǎn)品中"

5) "phone"

6) "18563717107"

4) "ttao"

5) 1) "name"

2) "姚元濤"

3) "jtzz"

4) "一個生病的人只"

5) "phone"

6) "18563717107"

ft.search student '@phone:185* @name:豆豆'

1) "1"

2) "doudou"

3) 1) "name"

2) "豆豆"

3) "jtzz"

4) "“檢索”是很多產(chǎn)品中"

5) "phone"

6) "18563717107"

1.4 刪除

1.4.1 刪除文檔

xxx.xxx.xxx.xxx:0>ft.del student 002

"1"

1.4.3 刪除索引

xxx.xxx.xxx.xxx:0>ft.drop student

"OK"

1.5 查看

1.5.1 查看所有索引

xxx.xxx.xxx.xxx:0>FT._LIST

1) "student1"

2) "ttao"

3) "idx"

4) "student"

5) "myidx"

6) "123"

7) "myIndex"

8) "testung"

9) "student2"

1.5.2 查看索引文檔中的數(shù)據(jù)

1.5.2.1 獲取單條數(shù)據(jù)

xxx.xxx.xxx.xxx:0>ft.get student 001

1) "name"

2) "張三"

3) "sex"

4) "男"

5) "desc"

6) "這是一個學(xué)生"

7) "class"

8) "一班"

1.5.2.2 獲取多條數(shù)據(jù)

xxx.xxx.xxx.xxx:0>ft.mget student 001 002

1) 1) "name"

2) "張三"

3) "sex"

4) "男"

5) "desc"

6) "這是一個學(xué)生"

7) "class"

8) "一班"

2) 1) "name"

2) "張三"

3) "sex"

4) "男"

5) "desc"

6) "這是一個學(xué)生"

7) "class"

8) "一班"

1.6 索引別名操作

1.6.1 添加別名

123.232.112.84:0>FT.ALIASADD xs student

"OK"

給索引student起個xs的別名,一個索引可以起多個別名

1.6.2 修改別名

1.6.3 刪除別名

123.232.112.84:0>FT.ALIASDEL xs

"OK"

原文來源:https://mp.weixin.qq.com/s/NXCwciuPob3aG0cDRV5FZA

[我要糾錯]
[編輯:宋聰喬 &發(fā)表于江蘇]
關(guān)鍵詞: RediSearch 一個 Redis 模塊 Redis

來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺,并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請聯(lián)系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點(diǎn)保持中立,對所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點(diǎn)負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。

點(diǎn)個贊
0
踩一腳
0

您在閱讀:換掉ES!Redis官方搜索引擎來了,效率大幅提升

Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺保留所有權(quán)利

蘇公網(wǎng)安備32010402000125 蘇ICP備14051488號-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司

南京思必達(dá)教育科技有限公司版權(quán)所有   百度統(tǒng)計(jì)

主站蜘蛛池模板: 小明免费看看 | 日韩福利一区 | 久久网免费视频 | 香蕉超级碰碰碰97视频蜜芽 | 伦理片中文字幕完整视频 | 亚洲 欧美 手机 在线观看 | 国产一在线观看 | 欧美午夜春性猛交xxxx | 日韩一区二区三区不卡 | 亚洲视频四区 | 成人福利免费在线观看 | 亚洲无线码在线一区观看 | 欧美日本免费 | 男女第一次弄进去的视频 | 1717国产精品视频免费 | 国产成人刺激视频在线观看 | 永久视频 | 免费精品视频在线 | 国产欧美在线观看不卡一 | 国产91网站在线观看 | 国产精品成人观看视频国产奇米 | 羞羞网| 性欧美极品| 欧美在线播放成人免费 | 美国一级做a爰片性色毛片 美国一级做a一级视频 | 亚洲国产成人久久综合一 | 亚洲免费观看视频 | 色狠狠综合网 | 欧美日韩一区二区三区在线观看 | 国产一区二区精品在线观看 | 最近中文字幕大全2019 | 日韩福利视频一区 | 久久精品午夜 | jizz日| 免费麻豆国产黄网站在线观看 | 五月激情网站 | 亚洲午夜精品 | 日韩一区在线播放 | 天天干夜夜爱 | 国产在线观看黄色 | 看黄网址在线观看 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產(chǎn)品享最低成本,有需要聯(lián)系,
  • 卡爾蔡司鏡片優(yōu)惠店,鏡片價格低
  • 蘋果原裝手機(jī)殼