代码之家  ›  专栏  ›  技术社区  ›  Ehsan

Lucene的自定义排序

  •  0
  • Ehsan  · 技术社区  · 16 年前

    我的文档中有类似(标题、内容、日期时间)的字段 我想用以下公式对结果进行排序

    1)标题提升2.5

    2)内容提升1.5

    3)重要信息(更新的文档表示日期时间字段接近今天日期)增强3

    考虑到上述条件,如何编写查询 我该怎么办3

    任何帮助都将不胜感激。

    3 回复  |  直到 10 年前
        1
  •  1
  •   bajafresh4life    16 年前
    +title:foo^2.5 +content:bar^1.5 datetime:20100721^3
    

    显然,为datetime字段填写适当的值。这里的关键是datetime术语不是必需的术语;它只在函数中增加与该术语匹配的文档的分数。您可以为昨天的日期添加另一个日期时间术语,也可以为前一天添加另一个日期时间术语,依此类推,同时随着距离今天的日期越远,增加值越小。

        2
  •  0
  •   rjarmstrong    14 年前

    您可以使用函数查询来提高包含每个文本字段(即标题和内容)的文档的分数(均按日期排序)。然后在这之后,将最近的提升乘以上面给出的权重。

    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>
    

    您不能使用排序,因为第二和第三排序的顺序将毫无意义,当然,除非您的日期精度足够低。

        3
  •  0
  •   Madhav    10 年前

    如果您要根据自己的定义查找自定义排序,那么可以查看下面的示例。但它只会帮助您在单个字段上定义排序。稍后可以向查询中添加多个排序。

    不完全确定这是否有帮助

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

    推荐文章