0

我正在尝试根据此答案中讨论的最新发布时间来提升文档。

以下索引定义可以很好地创建一个填充了文章和食谱实体的索引。

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"; }
    }
}

使用 Reduce 功能时是否支持提升文档AbstractMultiMapIndexCreationTask<T>

我的一个想法是Boost()返回 a BoostedValue,所以实际上是传递给 Reduce 表达式的集合IEnumerable<BoostedValue>而不是IEnumerable<Result>,因此不能针对输入编译 Reduce 表达式?

4

1 回答 1

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>();

我假设你想搜索,因为你正在提升。您还应该将可搜索字段标记为已分析,如文档所述所述。

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

于 2012-12-31T17:19:20.923 回答