Redis全文搜索教程之创建索引并关联源数据( 二 )


建立索引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 ...:字段定义,用于定义字段名称、类型、是否排序、权重等 。可以定义多个字段 。
如果你想了解更多关于 ft.search 的语法以及字段定义相关的只是,可以打开官方文档,
https://redis.io/docs/interact/search-and-query/basic-constructs/schema-definition
Redis 中查询索引定义在 RediSearch 中要查询已经存在的索引详情也是很简单的,官方提供了 ft.info 索引名称 的语法,用来打印索引详情 。
> FT.INFO idx:goods 




推荐阅读