RediSearch 索引创建

本文介绍了如何使用Redis进行全文搜索,包括创建索引、添加文档、查询文档等操作,并详细解释了涉及的数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引创建

创建一个索引至少需要5个参数:

FT.CREATE myIdx SCHEMA title TEXT

如上所示,大写字母表示关键字,小写字母代表索引的属性。该命令创建了一个名为"myIdx"的索引,并且声明了一个域"title",其中关键字TEXT表示该域内容为文本类型,除文本类型,也可以定义为数值类型"NUMERIC",等等。

索引数据结构

索引数据结构定义在speck.h/IndexSpec, 如下所示

typedef struct {
  char *name; // 索引的名字
  FieldSpec *fields; // 索引域列表,该列表默认空间为1024个
  int numFields; // 当前索引中有效的域
  ......
} IndexSpec;

域信息数据结构定义在spec.h/FieldSpec,如下所示

typedef struct fieldSpec { //文档域结构
  char *name; //域名
  FieldType type; //域的类型,比如文本、数字等
  ......

添加文档到索引

添加一个文档至少需要7个参数:

FT.ADD myIdx doc1 1.0 FIELDS title "hello world"

添加文档数据结构

文档数据结构定义在document.h/Document, 如下所示

typedef struct {
  const char *name; //添加文档时指定的field名称
  RedisModuleString *text; //添加文档时指定的field内容
} DocumentField;

typedef struct {
  RedisModuleString *docKey; //即将文档添加到索引时使用的docId,也是检索结果
  DocumentField *fields; //即文档中实际包含的域数组,与索引结构不同,该数组为实际值,并不是所支持的最大值
  int numFields; //即文档中实际包含的域个数
  float score; //即将文档添加到索引时使用的score
  ......
} Document;

可见,每个新加入的文档,都会构建一个Document结构体。

查询文档

一个最简单的查询命令,如下所示,查询"hello world":

FT.SEARCH myIdx "hello world"

查询文档数据结构

每个查询指令都会构造一个结构体来完成该次查询,search_ctx.h/RedisSearchCtx结构体定义如下:

typedef struct {
  RedisModuleCtx *redisCtx; //模块信息,也里RediSearch本身就是Redis的一个模块,也就是RediSearch模块的相关信息
  RedisModuleKey *key; //OpenKey 返回的东东
  RedisModuleString *keyName; //"idx:" + 索引名字
  IndexSpec *spec; //索引数据结构
} RedisSearchCtx;

转载于:https://my.oschina.net/renhc/blog/1815536

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值