c# - 将 RediSearch 与 NRediSearch (C#) 结合使用,如何在 i.CountyId == id || 等两个数字字段上应用 OR 子句 i.CityId == id
问题描述
我正在.Net Core
使用 RediSearch 开发一个网络应用程序。以前我使用过应用内内存缓存,但我必须将其更改为分布式缓存。问题是,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<Item> Search(List<Location> 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
文档,但尚未找到任何答案。由于排序,我必须在一次搜索中执行此操作。
解决方案
我找到了他的答案。
FT.SEARCH idx "@title|body:(hello world) @url|image:mydomain"
可能 ifNRediSearch
可以在新查询中处理这个 or 运算符,如果不能,则必须直接通过它的客户端实现
推荐阅读
- javascript - JS - 重复数组项并在循环中重复更改值
- ros - 如何修改 Gazebo 插件,使其不仅适用于世界文件,还适用于 URDF 文件?
- android - 带有导航组件的 Fragment 中的 BottomNavigation
- python - 计算成绩并分配给每个学生
- c++ - 如何使用多维初始化列表初始化自定义容器?
- spring - Spring security 的 CSRF 令牌 - 我可以使用纯 HTML,还是需要 JSP?
- go - Go Firestore 从集合中获取所有文档
- python - 三角函数python的导数
- java - 无法从 jboss 调用 api.backblaze.com
- flutter - 如何处理小部件测试中的设备宽度和方向?