我正在开发一个 .Net Core
重新搜索的web应用程序。以前我使用的是应用内存缓存,但我必须将其更改为分布式缓存。问题是,web应用程序有非常复杂的搜索,必须从缓存中处理。我想我只是把缓存移到 Redis
必须过滤进去 Linq
将与应用程序内存缓存保持相同,但如果redis中有500k+个条目,则在同一主机上使用docker映像只需4秒钟即可将这些条目加载到变量中,因此这不是一个选项。
我现在已经实现了 RediSearch
与 NRediSearch
它似乎能很好地处理负载。我现在的问题是,我有一个搜索多个位置字段。
例子
class Item{
public int Id {get;set;}
public int CountyId {get;set;}
public int CityId {get;set;}
}
class Location{
public int LocationId {get;set;}
public bool IsCounty {get;set;}
}
我需要翻译以下内容 Linq
命令进入 RediSearch
```
public List Search(List location){
var result = items.Where(i => location.Any(l => l.IsCounty && l.Id == i.CountyId) || location.Any(l => !l.IsCounty && i.CityId == l.Id))
}
我读过这本书 `RediSearch` 文档,但尚未找到任何答案。我必须在一次搜索中这样做,因为排序。
2条答案
按热度按时间4ngedf3f1#
你可以使用我的图书馆,我建立在nredisearch。但它适用于简单的linq查询。它不适用于嵌套对象。如果你能为它的发展做出贡献,我会很高兴的。
如果我们讨论您的示例,您必须复制每个位置的数据,如下所示:
你可以用我的图书馆来搜索这个达哈。
再工作核
Package 经理:
Install-Package RedisworkCore
dotnet cli:dotnet add package RedisworkCore
您可以创建类似entityframework的上下文:然后可以使用find,where,any,all,sortby,sortbydescending,skip,take similar linq。
笔记:
您应该使用redisworkcore保存数据,否则它将无法工作。
没有进行性能测试。如果我能得到开源的支持,它可能会工作得更好。
ttygqcqt2#
我找到了他的答案。
可能如果
NRediSearch
可以在新查询中处理此or运算符,如果不能,则必须直接通过其客户端实现