Redis 中的二级索引通过 StackExchange.Redis

Secondary Index in Redis via StackExchange.Redis

使用 Spring data redis @indexed 我可以在 Redis 中设置索引。

像这样定义我的域

@RedisHash("customer")
    public class Customer extends Serializble{

    @Id
    Private String CustomerId;
    @Indexed
    Private String CustmerName;
    …
    }

我正在尝试使用 C# StackExchange.Redis 来实现。成功创建哈希 [​​=13=]

IDatabase db = redis.GetDatabase(Variables.RedisDatabaseIndex);


db.HashSet(Row.customerId, new HashEntry[] {new HashEntry("customerName", Row.customerName) )

问题是我无法创建类似于 spring data redis 中的 Indexed 选项的索引。我试图从 stackexchange.redis 文档中获取,但找不到任何解决方案。任何指针都会有所帮助

本质上,SE.Redis 只是公开了核心的 Redis 命令和原语。如果您知道要发出什么命令:SE.Redis 会帮助您。但是,它 不会 尝试提供更复杂的场景。您通常可以做这些事情 - 无论是手动还是通过像 RediSearch 这样的工具 - 但是:你需要自己弄清楚那部分。当你知道自己要做什么时,SE.Redis会帮你要求服务器去做。直接或通过 NRediSearch 等包装器。

StackExchange.Redis 简单地换行 RESP commands。它不会尝试在此之上提供任何抽象。

Redis 本身没有“二级索引”的概念 - 至少不是您可能习惯于使用传统关系数据库的方式。但是,它提供了许多数据结构,可用于维护有效的二级索引。

我不熟悉 Spring 的 Redis 客户端,但在上面的示例中,您必须手动维护某种形式的客户名称到客户 ID 的映射,例如每个名称使用另一个哈希或一个键。

如果您想提供某种形式的搜索,您可能需要查看 Trigram-based search

我写了 an article 关于如何维护这些索引(通过事务或批处理作业),您可能也会发现它们有用。话虽如此,它主要侧重于数字索引,而您似乎正在寻找某种形式的搜索。