要解锁 Redis OM 的一些最棒的功能,例如运行搜索、匹配、聚合、归约、映射等... 你需要告诉 Redis 如何存储数据以及如何索引数据。Redis OM 库提供的一个功能是创建直接映射到你的对象的索引,方法是将索引声明为类上的属性。
让我们从一个示例类开始。
[Document]
public partial class Person
{
[RedisIdField]
public string Id { get; set; }
[Searchable(Sortable = true)]
public string Name { get; set; }
[Indexed(Aggregatable = true)]
public GeoLoc? Home { get; set; }
[Indexed(Aggregatable = true)]
public GeoLoc? Work { get; set; }
[Indexed(Sortable = true)]
public int? Age { get; set; }
[Indexed(Sortable = true)]
public int? DepartmentNumber { get; set; }
[Indexed(Sortable = true)]
public double? Sales { get; set; }
[Indexed(Sortable = true)]
public double? SalesAdjustment { get; set; }
[Indexed(Sortable = true)]
public long? LastTimeOnline { get; set; }
[Indexed(Aggregatable = true)]
public string Email { get; set; }
}
如上所示,你可以使用 Document 属性声明一个类为索引。在 Document 属性中,你可以设置一些字段来帮助构建索引:
属性名称 | 描述 | 默认值 | 可选 |
---|---|---|---|
StorageType | 定义用于在 Redis 中存储对象的底层数据结构,选项为 HASH 和 JSON,注意 JSON 仅适用于 Redis Stack | HASH | true |
IndexName | 索引的名称 |
| true |
Prefixes | Redis 用于构建索引的键前缀 |
| true |
Language | 用于全文本搜索索引的语言 |
| true |
LanguageField | 文档存储其语言的字段的名称 |
| true |
Filter | 用于确定是否索引特定项的过滤器,例如 |
| true |
IdGenerationStrategy | 用于为文档生成 ID 的策略,如果为空,它将使用 ULID 生成策略 | UlidGenerationStrategy | true |
Redis 索引的每个类都必须包含一个用 RedisIdField
标记的 ID 字段。
除了声明 ID 字段外,你还可以声明索引字段,这将使你能够随后搜索这些字段中的值。有两种类型的字段级属性。
在 IndexedAttribute 中有一些属性可以让你进一步自定义存储和查询的方式。
PropertyName | type | 描述 | 默认值 | 可选 | |
---|---|---|---|---|---|
PropertyName |
| 要索引的属性的名称 | 正在索引的属性的名称 | true | |
Sortable |
| 是否索引该项以便在查询中对其进行排序,允许使用 |
| true | |
Normalize |
| 仅适用于 |
| true | |
Separator |
| 仅适用于 | ` | ` | true |
CaseSensitive |
| 仅适用于 |
| true |
对于 SearchableAttribute 有一些属性可以让你进一步自定义全文本搜索如何确定匹配项
PropertyName | type | 描述 | 默认值 | 可选 |
---|---|---|---|---|
PropertyName |
| 要索引的属性的名称 | 索引属性的名称 | true |
Sortable |
| 是否索引该项以便在查询中对其进行排序,允许使用 |
| true |
NoStem |
| 确定是否使用 词干提取,换句话说,将单词的词干添加到索引中,设置为 true 将阻止 Redis 索引单词的词干 |
| true |
PhoneticMatcher |
| 如果你希望索引使用(音似匹配)[https://oss.redis.com/redisearch/Phonetic_Matching/] ,则要使用的音似匹配器 | null | true |
Weight |
| 确定字段对检查结果准确性的重要性 | 1.0 | true |
声明索引后,创建索引非常简单。你只需为装饰的类型调用 CreateIndex 。库将负责将提供的类型序列化为可搜索索引。库不会尝试过于聪明,因此如果索引已经存在,则创建请求将被拒绝,你必须删除并重新添加索引(迁移是将来可能添加的功能)
var connection = provider.Connection;
connection.CreateIndex(typeof(Person));