Ravendb Live projections生成空值(Ravendb Lucene、Multimap、Live projections)

Ravendb Live projections生成空值(Ravendb Lucene、Multimap、Live projections),lucene,ravendb,multimap,Lucene,Ravendb,Multimap,首先,我为我的英语感到抱歉,如果我能简单地说出我的问题,我会非常高兴 我花了很多时间来解决多重地图索引和实时投影问题。我在stackoverflow、google、ayende博客等上读了太多。。。然而,这并不能解决我的问题 我想要什么: 我有一个应用程序,想要一个类似twitter的搜索,它是twitter搜索框,可以从多个来源进行搜索,比如twit内容、用户名和hashtags。当我得到结果时,我想将结果和形状索引结果的转换应用到FullSearchResult模型中。我还想知道结果在哪里。

首先,我为我的英语感到抱歉,如果我能简单地说出我的问题,我会非常高兴

我花了很多时间来解决多重地图索引和实时投影问题。我在stackoverflow、google、ayende博客等上读了太多。。。然而,这并不能解决我的问题

我想要什么: 我有一个应用程序,想要一个类似twitter的搜索,它是twitter搜索框,可以从多个来源进行搜索,比如twit内容、用户名和hashtags。当我得到结果时,我想将结果和形状索引结果的转换应用到FullSearchResult模型中。我还想知道结果在哪里。在帖子中,在用户中还是在标签中

问题: 我有3种类型的文档(Post、User、Tag)和multimap索引。当我用TransformResults创建多重映射索引时,我得到的所有结果都是空值。(我通过全文搜索使用多地图索引查询我的文档)

我的文档

public class Post
{
    public string Id { get; set; }

    public long SqlDbId { get; set; }

    public string Title { get; set; }

    public string Content { get; set; }

    public string ContentAsHtml { get; set; }

    public Status Status { get; set; }

    public DenormalizedUser User { get; set; }

    public DenormalizedTagCollection Tags { get; set; }
}

public class User
{
    public string Id { get; set; }

    public string Name { get; set; }

    public string Surname { get; set; }

    public string Email { get; set; }

    public string MobileNumber { get; set; }
}

public class Tag
{
    public string Id { get; set; }

    public long SqlDbId { get; set; }

    public string TagName { get; set; }

    public DenormalizedUser TagInserterDenormalizedUser { get; set; }

    public bool IsSystemTag { get; set; }

    public Status Status { get; set; }
}

public class FullSearchIndex : AbstractMultiMapIndexCreationTask<FullSearchResult>
{
    public FullSearchIndex()
    {
        AddMap<Post>(posts => from post in posts
                              let tags = post.Tags
                              where post.Status == Status.Active
                              select new
                              {
                                  UserId = post.User != null ? post.User.Id.ToString() : (string)null,
                                  PostId = post.Id,
                                  TagIds = tags != null ? tags.Select(tag => tag.Id).ToArray() : new string[0],
                                  SearchQuery = new object[] 
                                  {                                      
                                      post.Title,
                                      post.Content,
                                      post.Tags != null ? tags.Select(x => x.TagName).ToArray() : new string[0]
                                  },
                                  Source = SearchResultSource.ResultIsFromPost
                              });

        AddMap<User>(users => from user in users
                              select new
                              {
                                  UserId = user.Id,
                                  PostId = (string)null,
                                  TagIds = new string[0],
                                  SearchQuery = new object[] 
                                  {                                      
                                      user.Name,
                                      user.Surname
                                  },
                                  Source = SearchResultSource.ResultIsFromUser
                              });

        AddMap<Tag>(tags => from tag in tags
                            where tag.Status == Status.Active
                            select new
                            {
                                UserId = (string)null,
                                PostId = (string)null,
                                TagIds = new string[] { tag.Id },
                                SearchQuery = new object[] 
                                {
                                    tag.TagName
                                },
                                Source = SearchResultSource.ResultIsFromTag
                            });

        Index(searchResult => searchResult.SearchQuery, FieldIndexing.Analyzed);

        TransformResults = (clientSideDatabase, results) =>
                                from result in results
                                let post = clientSideDatabase.Load<Post>(result.PostId)
                                let tags = clientSideDatabase.Load<Tag>(result.TagIds)
                                let user = clientSideDatabase.Load<User>(result.UserId)
                                select new
                                {
                                    PostId = post != null ? post.Id : (string)null,
                                    PostTitle = post != null ? post.Title : (string)null,
                                    PostContent = post != null ? post.Content : (string)null,
                                    PostTags = tags != null ? tags.Select(x => x.TagName).ToArray() : (string[])null,

                                    UserId = user != null ? user.Id : (string)null,
                                    UserName = user != null ? user.Name : (string)null,
                                    UserSurname = user != null ? user.Surname : (string)null,
                                    UserEmail = user != null ? user.Email : (string)null,
                                    UserMobileNumber = user != null ? user.MobileNumber : (string)null
                                };
    }
}
公共类职位
{
公共字符串Id{get;set;}
公共长SqlDbId{get;set;}
公共字符串标题{get;set;}
公共字符串内容{get;set;}
公共字符串ContentAsHtml{get;set;}
公共状态状态{get;set;}
公共非规范化用户{get;set;}
公共非规范化的TagCollection标记{get;set;}
}
公共类用户
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
公共字符串姓氏{get;set;}
公共字符串电子邮件{get;set;}
公共字符串MobileNumber{get;set;}
}
公共类标签
{
公共字符串Id{get;set;}
公共长SqlDbId{get;set;}
公共字符串标记名{get;set;}
公共非规范化DUSER TagInserterDenormalizedUser{get;set;}
公共布尔IsSystemTag{get;set;}
公共状态状态{get;set;}
}
公共类FullSearchIndex:AbstractMultiMapIndexCreationTask
{
公共全文检索索引()
{
AddMap(posts=>from post in posts
让tags=post.tags
其中post.Status==Status.Active
选择新的
{
UserId=post.User!=null?post.User.Id.ToString():(字符串)null,
PostId=post.Id,
TagIds=tags!=null?tags.Select(tag=>tag.Id).ToArray():新字符串[0],
SearchQuery=新对象[]
{                                      
职务,,
发布内容,
post.Tags!=null?Tags.Select(x=>x.TagName).ToArray():新字符串[0]
},
Source=SearchResultSource.ResultsFromPost
});
AddMap(用户=>来自用户中的用户
选择新的
{
UserId=user.Id,
PostId=(字符串)null,
TagIds=新字符串[0],
SearchQuery=新对象[]
{                                      
用户名,
用户姓名
},
Source=SearchResultSource.ResultsFromUser
});
AddMap(标记=>来自标记中的标记
其中tag.Status==Status.Active
选择新的
{
UserId=(字符串)null,
PostId=(字符串)null,
TagIds=新字符串[]{tag.Id},
SearchQuery=新对象[]
{
标记名
},
Source=SearchResultSource.ResultIsFromTag
});
索引(searchResult=>searchResult.SearchQuery,FieldIndexing.Analysis);
TransformResults=(客户端数据库,结果)=>
从结果到结果
让post=clientSideDatabase.Load(result.PostId)
让tags=clientSideDatabase.Load(result.TagIds)
让user=clientSideDatabase.Load(result.UserId)
选择新的
{
PostId=post!=null?post.Id:(字符串)null,
PostTitle=post!=null?post.Title:(字符串)null,
PostContent=post!=null?post.Content:(字符串)null,
PostTags=tags!=null?标记。选择(x=>x.TagName).ToArray():(字符串[])null,
UserId=user!=null?user.Id:(字符串)null,
UserName=user!=null?user.Name:(字符串)null,
username=user!=null?user.姓氏:(字符串)null,
UserEmail=user!=null?user.Email:(字符串)null,
UserMobileNumber=user!=null?user.MobileNumber:(字符串)null
};
}
}
当我使用multimap索引和lucene搜索进行查询时,我有4个结果。但是,所有值都为空

query = "Tag50";
session.Query<FullSearchResult, FullSearchIndex>()
                        .Search(resultItem => resultItem.SearchQuery, query)
                        .As<FullSearchResultViewModel>()
                        .ToList();
query=“Tag50”;
session.Query()
.Search(resultItem=>resultItem.SearchQuery,查询)
.As()