RediSearch 索引创建

为什么80%的码农都做不了架构师?>>>   hot3.png

索引创建

创建一个索引至少需要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

你可能感兴趣的:(java,数据库,数据结构与算法)