我正在尝试根据最近发布的文档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表达式?
答案 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>()
。