国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - Redis全文搜索教程之創建索引并關聯源數據

Redis全文搜索教程之創建索引并關聯源數據

2023-12-21 05:00未知服務器之家 Redis

Redis 全文搜索是依賴于 Redis 官方提供的RediSearch來實現的。RediSearch 提供了一種簡單快速的方法對 hash 或者 json 類型數據的任何字段建立二級索引,然后就可以對被索引的 hash 或者 json 類型數據字段進行搜索和聚合操作。 這里我們

Redis 全文搜索是依賴于 Redis 官方提供的 RediSearch 來實現的。RediSearch 提供了一種簡單快速的方法對 hash 或者 json 類型數據的任何字段建立二級索引,然后就可以對被索引的 hash 或者 json 類型數據字段進行搜索和聚合操作。

這里我們把被索引的 hash 或者 json 類型數據叫做源數據。

本文大綱如下,

Redis全文搜索教程之創建索引并關聯源數據圖片

使用體驗

簡單場景下,用 RediSearch 來平替 Elasticsearch 的使用場景已經足夠。像是 Elasticsearch 中常用的查詢語法 AND 、OR 、IN 、NOT IN 、> 、< 、= 、like 等,在 RediSearch 中都是支持的。

此外 RediSearch 還支持聚合統計、停用詞、文本標記和轉義、同義詞、標簽、排序、向量查詢、中文分詞等。

就我個人來說,個人項目使用 RediSearch 作為全文搜索引擎已經夠用了,它有占用內存低、索引建立快、查詢數據性能足夠高等優點。

后續發展

就目前官方對 RediSearch 的支持更新來看,

Redis全文搜索教程之創建索引并關聯源數據圖片

RediSearch 官方更新頻率圖

最近一次提交記錄在 12 月 17 號。

可以看到 RediSearch 的更新頻率還是比較高的,而且是官方支持做的模塊,不用擔心后續無人維護。

雖然 Redis 天生支持分布式集群,但是 RediSearch 對 Redis 集群的支持還不完善,引用官方說明,

Redis全文搜索教程之創建索引并關聯源數據圖片

官方針對 RediSearch 的集群支持問題,提供了一個 RediSearch 集群版本,但是這個版本只能在 Redis 企業版或者 Redis Cloud 上能使用,開源版還沒有,這一點需要告訴大家。

遇到 bug

首先在使用 RediSearch 的過程中,遇到了 bug 并發現 bug 來源于 RediSearch,不要慌,也不要抱怨難用, 畢竟是開源項目,

Redis全文搜索教程之創建索引并關聯源數據圖片

官方issue列表

大家可以看到 issue 列表中有很多 bug 沒有解決。

不過本著開源共進的精神,希望大家發現了 bug 后,第一時間在 RediSearch 官方 github 上提個 issue,方便官方發現并解決問題。

RediSearch Github 倉庫地址:https://github.com/RediSearch/RediSearch

下面我給大家用 newbee-mall-pro 項目作為樣本,給大家介紹下如何創建一個索引并關聯源數據。

newbee-mall-pro 項目地址:https://github.com/wayn111/newbee-mall-pro

添加源數據

在 newbee-mall-pro 項目中,已經將商品數據以 hash 類型存入了 Redis 中,

其中,我們對于 key 名稱的定義規則是按照 newbee_mall:goods: + 商品ID。

這里我們的 key 名稱定義規則很重要,RediSearch 創建索引會基于 key 名稱前綴來生成。

hash 類型的 value 包含屬性如下,

  • goodsId : 商品 ID,唯一屬性,由數據庫商品表主鍵生成
  • goodsName : 商品名稱
  • goodsIntro : 商品簡介
  • goodsCategoryId : 商品分類 ID,唯一屬性,由數據庫商品分類表主鍵生成
  • goodsSellStatus : 商品上架狀態,0 代表下架,1 代表上架
  • sellingPrice : 商品售價
  • originalPrice : 商品原價
  • tag : 商品標簽

在 newbee-mall-pro 中,添加源數據的方法已經寫好了,代碼邏輯在 JedisSearch.addGoodsListIndex() 方法里,

public boolean addGoodsListIndex(String keyPrefix, List<Goods> list) {
    int chunk = 200;
    List<List<Goods>> partition = ListUtil.partition(list, chunk);
    AbstractPipeline pipelined = client.pipelined();
    for (List<Goods> goodsList : partition) {
        for (Goods goods : goodsList) {
            RsGoodsDTO target = new RsGoodsDTO();
            MyBeanUtil.copyProperties(goods, target);
            Map<String, String> hash = MyBeanUtil.toMap(target);
            // 支持中文
            hash.put("_language", Constants.GOODS_IDX_LANGUAGE);
            pipelined.hset(keyPrefix + goods.getGoodsId(), hash);
        }
    }
    pipelined.sync();
    return true;
}

上訴代碼中,其實就是把 list 商品列表以 hash 類型的數據結構寫進 Redis 中,并且為了加快寫入速度,使用了 Redis 提供的管道操作。

需要注意的就是 hash 類型中新增了一個 _language 字段,用于指定 RediSearch 對于源數據關聯的索引,要使用中文分詞查詢。

建立索引

RediSearch 通過提供一種簡單且自動的方式在 Redis hash 類型數據結構上創建二級索引,并且內部極大地簡化了這一過程。(最終會出現更多數據結構)

Redis全文搜索教程之創建索引并關聯源數據二級索引示意圖

如果我們要使用 RediSearch 查詢商品 hash 結構里的 goodsName 字段,那么必須要對該字段建立索引。

Jedis 新建索引

所以這里,我給大家介紹下在 newbee-mall-pro 項目中,是如何建立索引的,代碼邏輯在 GoodsServiceImpl.syncRs() 方法中,

// 定義索引結構
public boolean syncRs() {
    jedisSearch.dropIndex("idx:goods");
    Schema schema = new Schema()
            .addSortableTextField("goodsName", 1.0)
            .addSortableTextField("goodsIntro", 0.5)
            .addSortableNumericField("goodsId")
            .addSortableNumericField("goodsCategoryId")
            .addSortableNumericField("goodsSellStatus")
            .addSortableNumericField("sellingPrice")
            .addSortableNumericField("originalPrice")
            .addSortableTagField("tag", "|");
    jedisSearch.createIndex(Constants.GOODS_IDX_NAME, Constants.GOODS_IDX_PREFIX, schema);
}

上述代碼中,我們對商品 hash 結構里的下方字段都建立了索引。

  • goodsName:文本類型,可排序,設置權重為 1.0
  • goodsIntro:文本類型,可排序,設置權重為 0.5
  • goodsId:數字類型,可排序
  • goodsCategoryId:數字類型,可排序
  • goodsSellStatus:數字類型,可排序
  • sellingPrice:數字類型,可排序
  • originalPrice:數字類型,可排序
  • tag:標簽類型,可排序,設置分隔符為字符串 |

在 RediSerach 中可以添加的字段類型有 text、numberic、tag 等,可以設置是否排序。

并且還可以設置權重系數,表示該字段已加權。這對于在搜索操作期間為特定字段分配不同的重要性級別非常有用,通常就是在條件篩選完成后的打分排序階段用于提升或者降低排名。

Redis 中的新建索引語法

當我們把上面的 Jedis 新建索引的代碼轉換為 Redis 中的語法后,如下

> FT.CREATE idx:goods ON hash PREFIX 1 "newbeemall:goods:" \
SCHEMA goodsName TEXT SORTABLE WEIGHT 1.0 \
SCHEMA goodsIntro TEXT SORTABLE WEIGHT 0.5 \
goodsId NUMERIC SORTABLE \
goodsCategoryId NUMERIC SORTABLE \
goodsSellStatus NUMERIC SORTABLE \
sellingPrice NUMERIC SORTABLE \
originalPrice NUMERIC SORTABLE \
tag TAG SORTABLE SEPARATOR "|"

現在我給大家詳細介紹下這條命令:

  • FT.CREATE:RediSearch 中索引創建語法。
  • idx:goods:指定索引名稱,索引名稱將在所有鍵名稱中使用,因此請保持簡短。
  • ON hash:指定索引關聯的結構類型。需要注意的是,在 RediSearch 2.0 中僅支持哈希結構,隨著 RediSearch 更新,后續有望支持更多數據結構。
  • PREFIX 1 "newbeemall:goods:":指定索引的關聯源數據的 key 前綴,可以指定多個前綴。
  • SCHEMA ...:字段定義,用于定義字段名稱、類型、是否排序、權重等??梢远x多個字段。

如果你想了解更多關于 ft.search 的語法以及字段定義相關的只是,可以打開官方文檔,

https://redis.io/docs/interact/search-and-query/basic-constructs/schema-definition

Redis 中查詢索引定義

在 RediSearch 中要查詢已經存在的索引詳情也是很簡單的,官方提供了 ft.info 索引名稱 的語法,用來打印索引詳情。

> FT.INFO idx:goods

延伸 · 閱讀

精彩推薦
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
主站蜘蛛池模板: 青青av| 精品国产精品一区二区夜夜嗨 | 黄色高清网站 | 久久精品小视频 | 牛牛澡牛牛爽一区二区 | 国产99久久精品一区二区永久免费 | 永久免费av | 欧美日韩亚洲另类 | 久草热8精品视频在线观看 欧美黄色小视频 | 最好看的2019年中文在线观看 | 一级做a爰片性色毛片精油 欧美中文字幕在线观看 | 五月婷婷中文 | 狠狠搞狠狠操 | 欧美第一页 | 最近免费中文字幕大全免费版视频 | 亚洲欧美在线视频 | 久久精品国产99国产 | 国产在线综合视频 | 99久久婷婷国产精品综合 | 亚洲激情综合 | 免费一级特黄3大片视频 | 亚洲视频在线看 | 欧美精品一区二区三区四区 | 黄久久久 | 中文字幕国产日韩 | 可以看的毛片网站 | 99热99 | 亚洲三级电影 | 久久奸| 久久久免费少妇高潮毛片 | 一区二区三区四区在线视频 | 久久精品国产亚洲 | 亚洲精品一区在线 | 极品女神高潮呻吟av久久 | 美日韩av | 亚洲在线视频一区二区 | 日韩欧美国产一区二区 | 天天碰天天操 | www.久久.com | 久久久久久久久久久久免费 | 中文精品在线观看 |