利用Reduced功能的AbstractMultiMapIndexCreationTask<T>是否支持提升整个文档? [英] Is Boosting whole documents supported in an AbstractMultiMapIndexCreationTask<T> that utilizes the Reduce feature?

查看:0
本文介绍了利用Reduced功能的AbstractMultiMapIndexCreationTask<T>是否支持提升整个文档?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试根据文档发布为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"; }
    }
}

当我尝试添加缩减以将文档存储为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,因此传递给Reduced表达式的集合实际上是IEnumerable<BoostedValue>而不是IEnumerable<Result>,因此无法根据输入编译Reduced表达式?

推荐答案

(此答案来自原始帖子中的评论)

如果您只想按发布日期排序,请不要使用Boost-Use.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>()

这篇关于利用Reduced功能的AbstractMultiMapIndexCreationTask&lt;T&gt;是否支持提升整个文档?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆