5

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

这个问题正是我想要做的,但指的是原生 Lucene,而不是 RavenDB。

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

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

如何提升日期更接近给定日期的文档,例如DateTime.UtcNow

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

4

1 回答 1

6

您可以在索引期间进行提升,它在 RavenDB 中已经存在很长时间了,但它根本不在文档中。但是,这里有一些单元测试可以说明。

这些测试显示了一个提升值,但它可以很容易地从其他文档值中计算出来。您可以使用完整的文档,因为这是在编写索引条目时完成的。您应该能够将其与您引用的帖子中描述的技术结合起来。

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 时间,或者如果您无法控制它的来源,请使用 aDateTimeOffset代替。为什么?因为您使用的是从某个参考点计算的持续时间,并且您不希望结果对于不同的时区或夏令时更改前后不明确。

于 2012-12-13T18:21:24.713 回答