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

Gre*_*g B 5 lucene ravendb

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

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

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

public class Document
{
    public string Title { get; set; }
    public DateTime DateCreated  { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*int 6

您可以在索引编制期间进行提升,它已经在RavenDB中使用了很长时间,但它根本不在文档中.然而,也有说明了一些单元测试在这里.

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

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

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

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

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

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