如何通过RavenDB中的新近度来提升文档?

时间:2012-12-13 16:04:33

标签: lucene ravendb

是否可以在RavenDB查询中提升最近的文档?

This question is exactly what I want to do但是指的是原生的Lucene,而不是RavenDB。

例如,如果我有这样的文档

public class Document
{
    public string Title { get; set; }
    public DateTime DateCreated  { get; set; }
}

如何推广日期更接近指定日期的文档,例如DateTime.UtcNow

我不想OrderByDecending(x => x.DateCreated),因为还有其他搜索参数需要影响结果。

1 个答案:

答案 0 :(得分:6)

你可以在索引编制期间进行提升,它已经在RavenDB中使用了很长时间,但它根本不在文档中。但是,有一些单元测试用于说明here

这些测试显示单个提升值,但可以轻松地从其他文档值计算。您可以使用完整的文档,因为在写入索引条目时已完成此操作。您应该能够将此与您引用的帖子中描述的技术相结合。

Map = docs => from doc in docs
              select new
              {
                  Title = doc.Title.Boost(doc.DateCreated.Ticks / 1000000f)
              };

您还可以提升整个文档,而不仅仅是标题字段,如果搜索算法中有其他字段,这可能会很有用:

Map = docs => from doc in docs
              select new
              {
                  doc.Title
              }.Boost(doc.DateCreated.Ticks / 1000000f);

您可能需要尝试使用正确的值来获取提升量。一毫秒内有10,000个滴答,这就是为什么我除以如此大的数字。

另外,请注意,您使用的DateTime是UTC格式,或者如果您无法控制它的来源,请改用DateTimeOffset。为什么?因为您使用某个参考点的计算持续时间,并且您不希望结果在不同时区或夏令时变化时不明确。