成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

換掉ES!Redis官方搜索引擎來了,性能炸裂!

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

1、介紹

RediSearch是一個Redis模塊,為Redis提供查詢、二次索引和全文搜索。

要使用RediSearch,首先要在Redis數據上聲明索引。

然后可以使用重新搜索查詢語言來查詢該數據。

RedSearch使用壓縮的反向索引進行快速索引,占用內存少。

RedSearch索引通過提供精確的短語匹配、模糊搜索和數字過濾等功能增強了

圖片圖片

2、實現特性

  • 基于文檔的多個字段全文索引
  • 高性能增量索引
  • 文檔排序(由用戶在索引時手動提供)
  • 在子查詢之間使用 AND 或 NOT 操作符的復雜布爾查詢
  • 可選的查詢子句
  • 基于前綴的搜索
  • 支持字段權重設置
  • 自動完成建議(帶有模糊前綴建議)
  • 精確的短語搜索
  • 在許多語言中基于詞干分析的查詢擴展
  • 支持用于查詢擴展和評分的自定義函數
  • 將搜索限制到特定的文檔字段
  • 數字過濾器和范圍
  • 使用 Redis 自己的地理命令進行地理過濾
  • Unicode 支持(需要 UTF-8 字符集)
  • 檢索完整的文檔內容或只是 ID 的檢索
  • 支持文檔刪除和更新與索引垃圾收集
  • 支持部分更新和條件文檔更新

對比 Elasticsearch

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

圖片

索引構建測試

我們模擬了一個多租戶電子商務應用程序,其中每個租戶代表一個產品類別并維護自己的索引。對于此基準測試,我們構建了 50K 個索引(或產品),每個索引最多存儲 500 個文檔(或項目),總共 2500 萬個文檔。RediSearch 僅用了 201 秒就構建了索引,平均每秒運行 125K 個索引。然而,Elasticsearch 在 921 個索引后崩潰了,顯然它不是為應對這種負載而設計的。

圖片

查詢性能測試

一旦數據集被索引,我們就使用在專用負載生成器服務器上運行的 32 個客戶端啟動兩個單詞的搜索查詢。如下圖所示,RediSearch 吞吐量達到了 12.5K 操作/秒,而 Elasticsearch 為 3.1K 操作/秒,速度提高了 4 倍。此外,RediSearch 延遲稍好一些,平均為 8 毫秒,而 Elasticsearch 為 10 毫秒。

圖片

3、安裝

3.1 源碼安裝

git clone https://github.com/RediSearch/RediSearch.git
cd RediSearch # 進入模塊目錄
make setup
make install

3.2 docker安裝

note: RediSearch的安裝比較復雜原包無法進行編譯操作所以我們使用docker安裝

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

3.3 判斷是否安裝成功

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"

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

命令行操作

1、創建

1.1 創建索引

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

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

student 表示索引名,name、sex、desc表示字段,text表示類型(這樣表示只是為了便于理解)“weight”為權重,默認值為 1.0

type student
"none"

我們創建的索引redis是不認識的,這證明使用的是插件。

1.2 創建文檔

創建文檔上下文的過程不妨想想成向表中插入數據,這里請注意字段名可以使用雙引號但切記一定要用英文,這里之所以著重提出是因為有些編譯器中文雙引號和英文雙引號用肉眼實在難以辨認否則會出現“Fields must be specified in FIELD VALUE pairs”(其實是將“ 當作內容處理了以至于缺少了字段

123.232.112.84:0>ft.add student 0011.0 language "chinese" fields name "張三" sex "男" desc "這是一個學生"class "一班"
"OK"

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

1.3 查詢

1.3.1 基本查詢

1.3.1.1 全量查詢
123.232.112.84: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) "這是一個學生"

4) "002"
5) 1) "name"
   2) "張三"
   3) "sex"
   4) "男"
   5) "desc"
   6) "這是一個學生"
1.3.1.2 匹配查詢
123.232.112.84:0>ft.search student "張三" limit 010 RETURN 3 name sex desc
1) "2"
2) "001"
3) 1) "name"
   2) "張三"
   3) "sex"
   4) "男"
   5) "desc"
   6) "這是一個學生"

4) "002"
5) 1) "name"
   2) "張三"
   3) "sex"
   4) "男"
   5) "desc"
   6) "這是一個學生"

limit 與mysql相識主要用于分頁,此處是全量匹配,如果沒有設置language “chinese” 此處查詢為0,

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) "這是一個學生"
1.3.2.2 模糊搜索
123.232.112.84:0>FT.SEARCH beers "%%張店%%"
1) "1"
2) "beer:1"
3) 1) "name"
   2) "集團本部已發布【文明就餐公約】,2號樓辦公人員午餐的就餐時間是11:45~13:00,現經行政服務部進行抽查,發現我們部門有員工違規就餐現象。請大家務必遵守,相互轉告,對于外地回到集團辦公的同事,亦請遵守,謝謝!"
   3) "org"
   4) "山東省淄博市張店區"
   5) "school"
   6) "山東理工大學"

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

FT.CREATE idx SCHEMA txt TEXT
FT.ADD idx docCn 1.0 LANGUAGE chinese FIELDS txt "Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。從盤可以有意無意的對數據進行寫操作。由于完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道并接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。[8]"
FT.SEARCH idx "數據" LANGUAGE chinese HIGHLIGHT SUMMARIZE
# Outputs:
# <b>數據</b>?... <b>數據</b>進行寫操作。由于完全實現了發布... <b>數據</b>冗余很有幫助。[8...

之所以會出現這樣的效果是因為redisearch對文本進行了分詞,其使用的工具是friso相比es的ik還是弱一些前者主要是對中文分詞,體積小可移植性強。從而我們可以結合后后置匹配算法

123.232.112.84:0>FT.SEARCH idx "數*" LANGUAGE chinese HIGHLIGHT
1) "1"
2) "docCn"
3) 1) "txt"
   2) "Redis支持主從同步。<b>數據</b>可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層樹復制。從盤可以有意無意的對<b>數據</b>進行寫操作。由于完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道并接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和<b>數據</b>冗余很有幫助。[8]"

或者結合Levenshtein算法這樣基本上能夠滿足業務查詢需求

123.232.112.84:0>FT.SEARCH idx "%%單的樹%%" LANGUAGE chinese HIGHLIGHT
1) "1"
2) "docCn"
3) 1) "txt"
   2) "Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。這使得Redis可執行單層<b>樹</b>復制。從盤可以有意無意的對數據進行寫操作。由于完全實現了發布/訂閱機制,使得從數據庫在任何地方同步<b>樹</b>時,可訂閱一個頻道并接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。[8]"
1.3.2.3 字段查詢

通過字段查詢也可以實現模糊搜索,直接給例子,后面跟著官網上給的sql 和 redisearch的對照表

ft.search student *
1) "2"
2) "doudou"
3) 1) "name"
   2) "豆豆"
   3) "jtzz"
   4) "“檢索”是很多產品中"
   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) "“檢索”是很多產品中"
   5) "phone"
   6) "18563717107"

sql

redisearch

WHERE x=‘foo’ AND y=‘bar’

@x:foo @y:bar

WHERE x=‘foo’ AND y!=‘bar’

@x:foo -@y:bar

WHERE x=‘foo’ OR y=‘bar’

(@x:foo)

WHERE x IN (‘foo’, ‘bar’,‘hello world’)

@x:(foo

WHERE y=‘foo’ AND x NOT IN (‘foo’,‘bar’)

@y:foo (-@x:foo) (-@x:bar)

WHERE x NOT IN (‘foo’,‘bar’)

-@x:(foo

WHERE num BETWEEN 10 AND 20

@num:[10 20]

WHERE num >= 10

@num:[10 +inf]

WHERE num > 10

@num:[(10 +inf]

WHERE num < 10

@num:[-inf (10]

WHERE num <= 10

@num:[-inf 10]

WHERE num < 10 OR num > 20

@num:[-inf (10]

WHERE name LIKE ‘john%’

@name:john*

1.4 刪除

1.3.1 刪除文檔

123.232.112.84:0>ft.del student 002
"1"

1.3.3 刪除索引

123.232.112.84:0>ft.drop student
"OK"

1.5 查看

1.5.1 查看所有索引

123.232.112.84:0>FT._LIST
1) "student1"
2) "ttao"
3) "idx"
4) "student"
5) "myidx"
6) "123"
7) "myIndex"
8) "testung"
9) "student2"

1.5.2 查看索引文檔中的數據

1.5.2.1 獲取單條數據
123.232.112.84:0>ft.get student 001
1) "name"
2) "張三"
3) "sex"
4) "男"
5) "desc"
6) "這是一個學生"
7) "class"
8) "一班"
1.5.2.2 獲取多條數據
123.232.112.84:0>ft.mget student 001002
1) 1) "name"
   2) "張三"
   3) "sex"
   4) "男"
   5) "desc"
   6) "這是一個學生"
   7) "class"
   8) "一班"

2) 1) "name"
   2) "張三"
   3) "sex"
   4) "男"
   5) "desc"
   6) "這是一個學生"
   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"


責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2025-06-24 08:15:00

R edis線程數據庫

2011-06-20 18:23:06

SEO

2017-08-07 08:15:31

搜索引擎倒排

2020-03-20 10:14:49

搜索引擎倒排索引

2021-07-08 09:53:16

ChromiumGoogle搜索引擎

2022-10-08 09:13:18

搜索引擎?站

2012-09-07 13:22:21

搜索搜狗

2009-02-19 09:41:36

搜索引擎搜狐百度

2010-04-20 11:43:46

2009-09-22 16:23:52

搜索引擎

2013-11-07 16:49:09

微軟Bing必應

2023-02-08 10:45:23

2023-01-03 15:42:29

機器學習視頻搜索

2009-07-30 10:40:56

搜索引擎優化網站

2010-06-13 16:27:28

搜索引擎

2022-02-24 00:07:22

Shodan網絡搜索

2009-12-10 15:09:46

PHP搜索引擎類

2023-09-21 15:05:12

ChatGPT搜索引擎

2016-12-26 13:41:19

大數據搜索引擎工作原理

2011-06-03 10:19:53

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品一区二区三区在线播放 | 国产欧美三区 | 99riav3国产精品视频 | 成人免费在线观看 | 久久亚洲国产 | 日韩一区二区在线视频 | 婷婷五月色综合香五月 | 91精品久久久久久久 | 免费性视频 | 免费视频99 | 欧美成人一区二免费视频软件 | 欧美亚洲国语精品一区二区 | 日韩在线视频一区 | 欧美区在线观看 | 日韩有码一区二区三区 | 成人免费在线观看视频 | 97精品久久 | 成人欧美一区二区 | 成人av免费网站 | 亚洲精品久久久一区二区三区 | 欧美日韩高清一区二区三区 | 国产成人99久久亚洲综合精品 | 成人综合视频在线观看 | com.色.www在线观看 | 久久网亚洲 | 精品麻豆剧传媒av国产九九九 | 日韩精品专区在线影院重磅 | 天天插天天操 | 久久久.com| 激情五月综合 | 中文字幕动漫成人 | 久久久国产精品网站 | 在线中文字幕日韩 | 久久精品欧美一区二区三区麻豆 | 久久精品一区 | 中文字幕在线观看视频网站 | 青青久在线视频 | 一区二区三区电影在线观看 | 在线观看中文字幕dvd播放 | 在线日韩中文字幕 | 日韩视频观看 |