首页 文章

lucene的自定义排序

提问于
浏览
0

我有包含( Headers ,内容,日期时间)等字段的文档我想用以下公式对结果进行排序

1)冠军提升2.5

2)内容提升1.5

3)重要(提升那些较新的文件意味着日期时间字段接近今天日期)提升3

如何根据上述标准编写查询,我应该为#3做些什么

任何帮助都会非常感激 .

3 回答

  • 1
    +title:foo^2.5 +content:bar^1.5 datetime:20100721^3
    

    显然,请为datetime字段填写适当的值 . 这里的关键是日期时间不是必需的术语;它只有函数才能增加与该术语匹配的文档的分数 . 您可以为昨天的日期添加另一个日期时间字段,为前一天添加另一个日期时间,依此类推,同时在距离今天的日期更远的情况下减少提升 .

  • 0

    您可以使用函数查询来提高包含每个文本字段(即 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>
    

    您不能使用排序,因为二级和三级排序的排序将毫无意义,除非您的日期精确度足够低 .

  • 0

    如果您正在寻找基于您自己的定义的自定义排序,那么您可以查看下面的示例 . 但它只会帮助您在单个字段上定义排序 . 您可以稍后为查询添加多种排序 .

    不完全确定这是否有帮助

    https://github.com/smadha/lucene-sorting-example/blob/master/CustomSorter.java

相关问题