[英]Returning sub-properties from document in RavenDb via Index using Lucene
我正在使用RavenDB 2.5,我想做的是查询提供有效Lucene搜索词的Group
(请参阅下文),并获取匹配的Member
实例(甚至只是ID)的集合。 因此,类定义:
public class Group {
public string Id { get; set; }
public IList<Member> Members { get; set; }
}
public class Member {
public string Name { get; set; }
public string Bio { get; set; }
}
并且它们作为session.Store(groupInstance);
存储在数据库中session.Store(groupInstance);
如您所愿。 我想做的是查询并返回与给定搜索词匹配的Member
实例。
因此,类似:
public class GroupMembers_BySearchTerm : AbstractIndexCreationTask {
public override IndexDefinition CreateIndexDefinition(){
return new IndexDefinition {
Map = "from g in docs.Groups select new { Content = new [] { g.Members.Select(m => m.Name), g.Members.Select(m => m.Bio) }, Id = g.Id }",
Indexes = { { "Id", FieldIndexing.Default }, { "Content", FieldIndexing.Analyzed } }
}
}
}
如果我使用类似这样的方式进行调用:
session.Advanced.LuceneQuery<Group, GroupMembers_BySearchTerm>().Where("Id: myId AND Content: search terms").ToList();
我显然可以找回Group实例,但是我该如何找回Member?
像这样的索引呢:
public class Members_BySearchTermAndGroup : AbstractIndexCreationTask {
public override IndexDefinition CreateIndexDefinition(){
return new IndexDefinition {
Map = "from g in docs.Groups
from member in g.Members
select new {
GroupdId = g.Id,
Name = member.Name,
Bio = member.Bio,
Content = new [] {member.Name, member.Bio },
}",
Indexes = {
{ "GroupId", FieldIndexing.Default },
{ "Content", FieldIndexing.Analyzed }
},
Stores = {
{ "Name", FieldStorage.Yes },
{ "Bio", FieldStorage.Yes }
}
}
}
}
如果仔细观察,您会发现我们正在为组内的每个成员创建一个新的Lucene条目。 因此,您将能够查询这些元素并检索它们。
最后,您可以像这样查询您的商店(有关search的更多信息):
session.Query<Member, Members_BySearchTermAndGroup>()
.Search(x => x.Content, "search terms")
.ProjectFromIndexFieldsInto<Member>()
.ToList();
我现在无法检查此内容,但我想您需要使用ProjectFromIndexFieldsInto()来投影结果。 有关此链接中的投影的更多信息。
或者,按照您的示例:
session.Advanced
.LuceneQuery<Member, Members_BySearchTermAndGroup>()
.Where("GroupId: myId AND Content: search terms")
.SelectFields<Member>()
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.