使用Spring数据redis @indexed,我可以在Redis中设置索引。
仅以此定义我的域
@RedisHash("customer")
public class Customer extends Serializble{
@Id
Private String CustomerId;
@Indexed
Private String CustmerName;
…
}
我正在尝试实现C#StackExchange.Redis附带的功能。成功创建哈希
IDatabase db = redis.GetDatabase(Variables.RedisDatabaseIndex);
db.HashSet(Row.customerId, new HashEntry[] {new HashEntry("customerName", Row.customerName) )
问题是我无法在Spring数据Redis中创建类似于Indexed选项的Index。我试图从stackexchange.redis文档中获取信息,但是找不到任何解决方案。任何指针都会有所帮助
答案 0 :(得分:1)
StackExchange.Redis 只是包装了 RESP commands。它不会尝试在此之上提供任何抽象。
Redis 本身没有“二级索引”的概念 - 至少不是您可能习惯使用传统关系数据库的方式。但是,它提供了许多数据结构,可用于维护有效的二级索引。
我不熟悉 Spring 的 Redis 客户端,但在上面的示例中,您必须手动维护某种形式的客户名称到客户 ID 的映射,例如每个名称使用另一个哈希或一个键。
如果您想提供某种形式的搜索,您可能需要查看 Trigram-based search。
我写了 an article 关于如何维护这些索引(通过事务或批处理作业),您可能也会发现它们很有用。话虽如此,它主要侧重于数字索引,而您似乎正在寻找某种形式的搜索。
答案 1 :(得分:0)
本质上,SE.Redis仅公开了核心redis命令和原语。如果您知道要发出什么命令:SE.Redis将为您提供帮助。它不是,但是尝试提供更复杂的方案。您通常可以执行这些操作-无论是通过RediSearch之类的工具手动执行-:但是,您需要自己弄清楚那部分。当您知道要执行的操作时,SE.Redis将帮助您要求服务器执行此操作。可以直接使用,也可以通过NRediSearch之类的包装器。