是否可以在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)
,因为还有其他搜索参数需要影响结果。
答案 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
。为什么?因为您使用某个参考点的计算持续时间,并且您不希望结果在不同时区或夏令时变化时不明确。