2012-12-31 17 views
0

我正在尝试根据最近他们发布的日期作为discussed in this answer来增强文档。是否在使用Reduce功能的AbstractMultiMapIndexCreationTask <T>中支持整个文档?

以下索引定义可以很好地创建填充了Article和Recipe实体的索引。

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,所以收集传递给降低表达的实际上IEnumerable<BoostedValue>代替IEnumerable<Result>,因此降低表达不能对输入进行编译?

+0

你使用什么构建?这应该工作 –

+0

哦,对不起。 Boost将应用于最后一件事,而不是在地图上。 但请注意,您的索引没有意义。有没有必要减少 –

+0

@AyendeRahien我使用960版本。你是什么意思“在最后一件事”?你的意思是在Reduce中,而不是在Map中。你是说这个指数没有意义?在实际的实现中'Result'具有更多的属性,'Article'和'Recipe'是完全不同的实体。我需要一种将它们作为单个集合进行查询的方式,并以一致的方式将它们列在页面上。 “结果”的简单性以及“Article”和“Recipe”之间的相似性仅供参考。 –

回答

0

如果你只是想通过发布日期进行排序(这个答案从原始文章的评论结转),不要使用升压 - 使用.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>()中所示。

相关问题