我有以下索引来跟踪帖子的观看次数:
public class PostsByRequestsIndex : AbstractIndexCreationTask<PostRequest, RequestsGroupResult>
{
public PostsByRequestsIndex()
{
Map = posts =>
posts.Select(r => new { RequestCount = 1,
PostIdInternal = r.PostIdInternal,
PostStatus = LoadDocument<Post>(r.Id).Status.CurrentStatus});
Reduce = posts => posts.GroupBy(r => r.PostIdInternal).Select(
x => new PostsGroupResult { PostIdInternal = x.Key,
RequestCount = x.Sum(s => s.RequestCount) ,
PostStatus = x.First().PostStatus});
}
}
public class RequestsGroupResult
{
public PostStatus.Status PostStatus { get; set; }
public string PostIdInternal { get; set; }
public int RequestCount { get; set; }
}
这个索引打破了对Post类型文档的查询,所以我添加了另一个索引来索引所有帖子:
public class PostsIndex : AbstractIndexCreationTask<Post>
{
public PostsIndex()
{
Map = Posts => Posts.Select(r => new {
r.Id ,
Status_CurrentStatus = r.Status.CurrentStatus,
r.Title ,
r.Comments ,
r.Content ,
//more properties
r.Created });
StoreAllFields(FieldStorage.Yes);
}
}
这解决了对Post类型文档的现有查询的问题。
以下查询:
Session.Query<RequestsGroupResult, PostsByRequestsIndex>()
.Where(r => r.PostStatus == PostStatus.Status.Init)
.OrderByDescending(r => r.RequestCount)
在RavenDB工作室中检查索引时,它显示索引的PostStatus字段不包含任何值,即使Post文档都正确存储它们各自的状态。
如何将Post.PostStatus字段编入索引以正确检索其状态?