我有包含( Headers ,内容,日期时间)等字段的文档我想用以下公式对结果进行排序
1)冠军提升2.5
2)内容提升1.5
3)重要(提升那些较新的文件意味着日期时间字段接近今天日期)提升3
如何根据上述标准编写查询,我应该为#3做些什么
任何帮助都会非常感激 .
+title:foo^2.5 +content:bar^1.5 datetime:20100721^3
显然,请为datetime字段填写适当的值 . 这里的关键是日期时间不是必需的术语;它只有函数才能增加与该术语匹配的文档的分数 . 您可以为昨天的日期添加另一个日期时间字段,为前一天添加另一个日期时间,依此类推,同时在距离今天的日期更远的情况下减少提升 .
您可以使用函数查询来提高包含每个文本字段(即 Headers 和内容(均按日期排序))的文档的分数 . 然后在此之后将新近度增加乘以上面给出的权重 .
http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_boost_the_score_of_newer_documents
{!boost b=product(recip(ms(NOW,datetime),3.16e-11,1,1),2.5)}Title:<query> {!boost b=product(recip(ms(NOW,Created),3.16e-11,1,1),1.5)}Content:<query>
您不能使用排序,因为二级和三级排序的排序将毫无意义,除非您的日期精确度足够低 .
如果您正在寻找基于您自己的定义的自定义排序,那么您可以查看下面的示例 . 但它只会帮助您在单个字段上定义排序 . 您可以稍后为查询添加多种排序 .
不完全确定这是否有帮助
https://github.com/smadha/lucene-sorting-example/blob/master/CustomSorter.java
3 回答
显然,请为datetime字段填写适当的值 . 这里的关键是日期时间不是必需的术语;它只有函数才能增加与该术语匹配的文档的分数 . 您可以为昨天的日期添加另一个日期时间字段,为前一天添加另一个日期时间,依此类推,同时在距离今天的日期更远的情况下减少提升 .
您可以使用函数查询来提高包含每个文本字段(即 Headers 和内容(均按日期排序))的文档的分数 . 然后在此之后将新近度增加乘以上面给出的权重 .
http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_boost_the_score_of_newer_documents
您不能使用排序,因为二级和三级排序的排序将毫无意义,除非您的日期精确度足够低 .
如果您正在寻找基于您自己的定义的自定义排序,那么您可以查看下面的示例 . 但它只会帮助您在单个字段上定义排序 . 您可以稍后为查询添加多种排序 .
不完全确定这是否有帮助
https://github.com/smadha/lucene-sorting-example/blob/master/CustomSorter.java