Redisearch實現的全文檢索功能服務


“檢索”是很多產品中無法繞開的一個功能模塊,當數據量小的時候可以使用模糊查詢等操作湊合一下,但是當面臨海量數據和高並發的時候,業界常用 elasticsearch 和 lucene 等方案,但是elasticsearch對運行時內存有着最低限額,其運行時大小推薦 2G 以上的內存空間,並且需要額外的磁盤空間做持久化存儲。

    其實mongoDB 內置的正則匹配搜索文本以及自帶的 text 索引和 search 關鍵字也是一套靠譜的解決方案,但是這一次我們帶來一種更加高效經濟的文本檢索方案:Redisearch

 

Redis Modules 是 redis 4.0 引入的一種擴展機制,用戶可以通過實現 redis module 提供的 C api 接口為 redis 服務添加定制化功能。 redisLab 也希望籍此來規范 redis 社區的 ecosystem 實現。

    redis module 本身的版本獨立於redis,並且以編譯成動態加載庫 .so 文件的方式 release, 不同版本的 redis 可以 load 同一版本 module.so 文件。

    redis 提供了兩種加載方式。可以通過 在 conf 文件中 加入 loadmodule /path/to/mymodule.so ,也可以在 redis-cli中使用命令 MODULE LOAD /path/to/panda.so 動態加載,MODULE UNLOAD 卸載。

 

    特性

    基於文檔的全文索引。
    高性能增量索引。
    支持文檔評分,文檔字段(field) 權重機制。
    支持布爾復雜查詢。
    支持自動補全。
    基於 snowball 的詞干分析,多語言支持。使用 friso 支持中文分詞。
    utf-8 字符集支持。
    redis 數據持久化支持。
    自定義評分機制。

    

    其原理是在 redis 的 hashmap 基礎上就可以很容易實現倒排索引的結構。redisearch 倒排索引除了實現了基礎功能外,還引入了內存管理等優化功能。如果有興趣可以閱讀源碼中的 src/inverted_index.c 部分

    

    首先,安裝Rediseach,記住一點你本地的redis服務版本必須在4.0以上,網上一大堆編譯安裝的攻略,繁瑣又浪費時間,所以又到了Docker登場時間了,hub上有編譯好的免費鏡像供我們下載

1,安裝redis

#下載rpm源並安裝
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
#安裝redis
yum --enablerepo=remi install -y redis
#啟動redis服務
service redis start

2,安裝Rediseach

docker pull redislabs/redisearch
下載后,直接在后台啟動服務
docker run -d -p 6666:6379 redislabs/redisearch:latest

 

 此時已經有一個docker容器在后台啟動了,redis服務映射到了宿主的6666端口,我們來連接一下

redis-cli -h localhost -p 6666

 

 檢查 modules 是否成功加載

如果返回數組中存在 "ft" , 則表明 redisearch 已經成功加載。

Redisearch 的索引概念 與elasticsearch 的 index 類似,表示某一類文檔資源單元。

這里我們定義了一個 SMARTX_VM 索引,其中存儲的文檔 包含 了 title 和 desc 兩個 類型為 TEXT 的field。

    

FT.CREATE SMARTX_VM SCHEMA title TEXT WEIGHT 5.0 desc TEXT

 然后向剛剛創建的這條索引加一個文檔

FT.ADD SMARTX_VM vm-20190901 1.0 LANGUAGE "chinese" FIELDS title "中國" desc "我是中國人"

LANGUAGE "chinese" 參數 表示 使用 中文分詞器 處理文本。默認為英文

    此時我們進行文檔檢索

 

FT.SEARCH SMARTX_VM "中國" LANGUAGE "chinese"

  注意檢索的時候也要指定語言,這里我們用中文分詞,默認的英文分詞是無法檢索中文的

 

 可以看到已經返回了我們想要的結果。

Redisearch 是一個高效,功能完備的內存存儲的高性能全文檢索組件, 十分適合應用在數據量適中, 內存和存儲空間有限的環境。借助數據同步手段,我們可以很方便的將redisearch 結合到現有的數據存儲中, 進而向產品提供 全文檢索, 自動補全等服務優化功能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM