说我有User
这样的课程:
public class User
{
public bool IsActive {get;set;}
public string[] Tags{get;set;}
public string Description {get;set;}
}
我想使用RavenDB搜索符合以下条件的用户集:
IsActive
= true Tags
包含' hello '和' world 'Description
包含以下短语“ abject failure ”我已经研究过Lucene Query语法,我甚至有一些工作正在运行,但是所有人都感到非常笨重,有很多组合字符串构建来创建基于文本的lucene查询字符串。我不愿意把我的代码放在这里,因为它非常臭。
我认为我想要做的是为描述和标记提交一个Lucene Search
,然后使用Where
子句为IsActive字段过滤它,可能就像这个Filter RavenDB Search Results一样。但我迷路了。
我正在使用最新的正式版本(960),因此我之后无法获得所有的常规内容。例如,this solution是禁止的,因为960似乎不支持.As<T>()
扩展名。
问题
如何构建所需的索引和查询以执行组合的搜索:
IsActive
Tags
Description
返回强类型的User
个对象列表?
感谢您提供任何代码示例或指示。
答案 0 :(得分:1)
您可以这样查询:
var results = (from u in Session.Query<User>("YourUserIndex")
where u.IsActive && u.Tags.Any(x=>x == "hello") && x.Tags.Any(x=>x=="world")
select u)
.Search(x=>x.Description, "abject failure")
.ToList();
YourUserIndex
看起来像这样:
from u in docs.Users
select new { u.IsActive, u.Tags, u.Description };
您需要将“描述”字段标记为已分析。