我有一个查询,它使用 IRavenQueryable.Search 方法返回有效的搜索结果。 但是,我想通过 .where 方法调用,以便随后筛选搜索结果以仅包含具有匹配 ProjectId 的搜索结果。
我的对象结构是一组项目实体,每个实体都包含一组问题实体。
我的索引创建问题搜索结果的投影,如下所示:
{id, key, summary, description, projectId, ProjectKey, query}
属性是关键字搜索使用的对象 []。
当我运行关键字搜索时:
VaR 结果 = 会话。查询()。AsProjection()。搜索(x => x.Query,"某个关键字");
我得到了正确的结果。 但是当我尝试也应用 Where 方法时:
结果 = 结果。其中(i => i.ProjectId == SelectedProject.Id);
它不会筛选结果,而是包括具有匹配项目 ID 的所有其他结果。
在这种情况下,强制 Linq 或 RavenDB 的 IRavenQueryable 应用 AND 而不是 OR 的正确方法是什么?
发布这个问题后,我设法在stackoverflow的其他地方找到了答案。
这是解决方案:
ravendb 将搜索与位置相结合
简而言之,Search 方法提供了一个额外的可选参数 [options],允许您指定如何将搜索与查询中的其他 where 子句组合在一起。 它默认为 SearchOptions。或者,您需要将其显式设置为 options:SearchOptions.And。