国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

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

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

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

本文大綱如下,

圖片圖片

使用體驗

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

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

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

后續發展

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

圖片圖片

RediSearch 官方更新頻率圖

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

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

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

圖片圖片

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

遇到 bug

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

圖片圖片

官方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 類型數據結構上創建二級索引,并且內部極大地簡化了這一過程。(最終會出現更多數據結構)

二級索引示意圖二級索引示意圖

如果我們要使用 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 ...:字段定義,用于定義字段名稱、類型、是否排序、權重等。可以定義多個字段。

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

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

Redis 中查詢索引定義

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

> FT.INFO idx:goods

責任編輯:武曉燕 來源: waynblog
相關推薦

2017-08-17 16:42:38

Elastic 全文搜索服務器

2010-06-11 17:00:34

2018-12-28 09:48:11

SolrElasticSear搜索

2010-06-10 13:54:10

MySQL全文搜索

2023-12-10 20:33:50

Redis搜索全文

2021-04-12 10:38:17

ElasticSearSolrJava

2009-02-25 13:59:57

布爾全文搜索全文搜索內置函數

2012-04-13 09:05:41

LuceneJava

2024-04-16 09:53:56

PostgreSQL數據庫優化索引

2025-05-26 04:10:00

2022-03-22 15:20:32

微信全文搜索

2025-02-05 07:26:45

2009-04-22 14:19:32

Oracle中文索引基礎

2020-07-31 09:55:27

Linux分布式Elasticsear

2011-05-13 14:34:31

Oracle全文索引設置

2015-04-03 11:23:11

JavaScript全文搜索相關度評分

2011-09-09 09:42:48

數據庫集群備份

2009-09-25 10:01:07

Linux教程Linux mkdir創建文件夾命令

2011-04-02 13:21:34

SQL Server數據庫全文索引

2023-12-20 12:49:05

索引數據檢索數據庫
點贊
收藏

51CTO技術棧公眾號

国产精品久久久亚洲一区| 天天操天天色综合| 久久久精品国产一区二区三区| 蜜桃a∨噜噜一区二区三区| 欧美亚洲国产另类| 9l视频自拍九色9l视频成人| 伊人久久综合97精品| 亚洲高清在线一区| 亚洲美女又黄又爽在线观看| 丁香影院在线| 国产一区二区三区视频| 亚洲免费成人av在线| 香蕉加勒比综合久久| 一区二区三区视频国产日韩| 日韩国产精品91| 久草资源站在线观看| 五月天亚洲婷婷| 精品免费av在线| 亚洲自拍偷拍网址| 成人av片在线观看| 黄色高清在线观看| 亚洲欧洲日本专区| 狠狠色狠狠色综合日日tαg| 成人免费在线网| 欧美日韩极品在线观看一区| 凹凸av导航大全精品| 国产视频在线观看网站| 色天天综合色天天久久| 91国内精品| 免费看污污视频| 欧美精品丝袜久久久中文字幕| 综合成人在线| 日韩成人av网站| 婷婷开心激情综合| 国内精品偷拍| av网站在线观看不卡| 精品国产一区二区三区忘忧草| 国产精品久久久久蜜臀 | 国产激情视频一区二区在线观看| 亚洲裸体视频| 精品免费国产| 欧美日韩国产美女| 国产一区二区三区网| 伊人永久在线| 欧美一区二区三区在线播放| 色综合久久久久综合体桃花网| 精品国产导航| 污视频网站在线看| 亚洲精美视频| 日韩欧美成人激情| 狠狠网亚洲精品| 日本免费一区二区三区等视频| 亚洲精品久久久久久一区二区| 亚洲高清色综合| 高清shemale亚洲人妖| 日韩中文影院| 亚洲欧洲日产国码无码久久99| 91干在线观看| 欧美日韩国产在线播放| 亚洲精品中文字幕乱码| 中文字幕在线资源| 91精品视频在线免费观看| 欧美变态凌虐bdsm| 成人国产精品免费观看| 亚洲小说图片| 欧美黑人一区| 情趣网站视频在线观看| 操人视频欧美| 欧美成人a∨高清免费观看| 免费在线观看视频一区| 欧美羞羞视频| 九九久久九九久久| 欧美理论电影在线播放| 国产精品午夜在线| 欧美激情亚洲| 日本亚洲精品| 久久久www免费人成黑人精品| 亚洲系列中文字幕| 韩国精品视频| 久久久天堂国产精品| 欧美性猛xxx| 天天久久夜夜| 国产精品蜜臀| 欧美极品少妇xxxxx| 欧美日产国产精品| 国产亚洲人成网站| 久久99热狠狠色一区二区| 无码人妻丰满熟妇区毛片| 日韩视频在线免费| 国产中文在线视频| 亚洲人成网站999久久久综合| 精品动漫一区| www.97.| 韩国成人动漫在线观看| 日本乱人伦aⅴ精品| 麻豆国产精品视频| 成人久久18免费网站漫画| 先锋影音在线资源站91| 91精品国产欧美一区二区| 免费欧美在线| 午夜视频成人| 91国内精品| 亚洲精品9999| 亚洲成人av在线电影| 欧美激情成人在线| 欧美13一16娇小xxxx| 黄色片视频在线播放| 亚洲精品二区| av免费观看大全| 天天爽夜夜爽一区二区三区| 精品视频在线观看一区| 男人插女人欧美| 中文字幕黄色大片| 国产亚洲欧美一区二区| 91久久久一线二线三线品牌| 亚洲欧美日韩天堂| 国产999精品久久久久久| 欧美人体视频| h片在线播放| 福利在线一区二区三区| 就去色蜜桃综合| 欧美激情在线狂野欧美精品| 欧美日韩在线不卡| 懂色中文一区二区在线播放| 91亚洲一区| 午夜电影一区| 性欧美18xxxhd| 欧洲性视频在线播放| 天堂视频中文在线| 高清日韩av| 国产精品久久..4399| 男人草女人视频| 日本午夜在线亚洲.国产| 国产精品久久久久久福利一牛影视 | 在线激情av| 老鸭窝91久久精品色噜噜导演| 日本在线观看a| 99精品一区二区三区| 久久久久久亚洲精品美女| 污黄色在线观看| 欧美久久久久久久久久久久久| 国产精品日韩一区二区免费视频| 国产一区欧美二区三区| 久久免费国产视频| 最新亚洲国产精品| 欧美一区二区在线视频| 猛男gaygay欧美视频| 成人网av.com/| 国产在线88av| 91福利在线免费| 欧美另类极品| 91最新在线视频| 91精品啪在线观看国产爱臀| 精品国产一区二区三区| 欧美一区=区| 亚洲综合色成人| 欧美日韩精品电影| 日韩有码视频在线| 免费高清视频精品| 亚洲资源在线观看| 在线播放欧美女士性生活| 午夜欧美大片免费观看| 亚洲看片网站| 好了av在线| 欧美特黄a级高清免费大片a级| 亚洲欧美一区二区三区孕妇| 日韩精品视频在线播放| 蜜桃av色综合| 天堂影视av| 久久激情av| 国产精品影音先锋| 91精品免费观看| 欧美日韩另类综合| 欧美成人影院在线播放| 欧美极品另类| 亚洲一区不卡| 欧美成人a在线| 日韩一区二区三区高清| 国产三线在线| 伊人久久大香线| 欧美日韩亚洲91| 国产乱码精品一区二区三区日韩精品 | 国产亚洲一区精品| 只有这里有精品| 日本在线一区| 伊人春色在线观看| 日韩精品三区四区| 精品美女在线观看| 一区二区三区欧美成人| 福利在线一区| 成人欧美一区二区三区小说| 在线观看日韩av先锋影音电影院| 精品国产91九色蝌蚪| 日韩av电影手机在线| 国产综合香蕉五月婷在线| 精品乱子伦一区二区三区| 日韩黄色片视频| 欧洲在线视频| 99综合精品| 高跟丝袜欧美一区|