是否在使用Reduce功能的AbstractMultiMapIndexCreationTask <t>中支持整个文档?</t>

时间:2012-12-31 10:42:37

标签: ravendb

我正在尝试根据最近发布的文档discussed in this answer来推广文档。

以下索引定义可以很好地创建使用文章和配方实体填充的索引。

public class TestIndex : AbstractMultiMapIndexCreationTask<Result>
{
    public TestIndex()
    {
        AddMap<Article>(docs => from doc in docs
                                where !doc.IsDeleted
                                select new Result
                                {
                                    Id            = doc.Id,
                                    Title         = doc.Title,
                                    DatePublished = doc.DatePublished
                                }.Boost(doc.DatePublished.Ticks / 1000000f));

        AddMap<Recipe>(docs => from doc in docs
                               where !doc.IsDeleted
                               select new Result
                               {
                                   Id            = doc.Id,
                                   Title         = doc.Title,
                                   DatePublished = doc.DatePublished
                               }.Boost(doc.DatePublished.Ticks / 100000f));
    }

    public override string IndexName
    {
        get { return "Tests/WithBoost"; }
    }
}

当我尝试添加Reduce以将文档存储为Result项时,索引将停止生成任何结果。

public class TestIndex : AbstractMultiMapIndexCreationTask<Result>
{
    public TestIndex()
    {
        AddMap<Article>(docs => from doc in docs
                                where !doc.IsDeleted
                                select new Result
                                {
                                    Id            = doc.Id,
                                    Title         = doc.Title,
                                    DatePublished = doc.DatePublished
                                }.Boost(doc.DatePublished.Ticks / 100000f));

        AddMap<Recipe>(docs => from doc in docs
                               where !doc.IsDeleted
                               select new Result
                               {
                                   Id            = doc.Id,
                                   Title         = doc.Title,
                                   DatePublished = doc.DatePublished
                               }.Boost(doc.DatePublished.Ticks / 100000f));

        Reduce = docs => from doc in docs
                         group doc by doc.Id into g
                         select new Result
                         {
                             Id            = g.First().Id,
                             Title         = g.First().Title,
                             DatePublished = g.First().DatePublished
                         };
    }

    public override string IndexName
    {
        get { return "Tests/WithBoost"; }
    }
}

使用AbstractMultiMapIndexCreationTask<T>的缩小功能时是否支持提升文档?

我的想法是Boost()返回BoostedValue,因此集合实际上是IEnumerable<BoostedValue>而不是IEnumerable<Result>传递给Reduce表达式,因此无法根据输入编译Reduce表达式?

1 个答案:

答案 0 :(得分:0)

(这个答案来自原帖中的评论)

如果您只想按发布日期排序,请不要使用boost - 使用.OrderByDescending(x=> x.DatePublished)

如果您只是想知道如何查询组合的多图结果,您可以像这样轻松地执行此操作:

var results = session.Query<Result, TestIndex>()
                     .Search(x=> x.Title, "whatever")
                     .As<object>()
                     .ToList();

var articles = results.OfType<Article>();
var recipies = results.OfType<Recipe>();

我假设您要搜索,因为您正在提升。您还应该将可搜索字段标记为已分析,如记录here

我还假设您希望将文章和食谱分成单独的列表。如果不这样做,那么您可以直接使用对象列表。或者,如果您有一些他们都使用的基类或接口,那么您可以使用它而不是对象,如.As<IWhatever>()