Solr:先按短语排序,然后按日期排序

Solr: sort by phrase slop first then by date

我有一个 Solr (6.2) DisMax Select 查询,它使用 pf(短语字段)和 ps(短语溢出)。

pf = text^2.2 title^2.2, ps = 2;

我希望我的查询 return 结果遵循此算法:

  1. 如果查询词组完全匹配,return它们在前,按日期排序
  2. 如果有文档至少包含查询短语中的一个词,return其次,按日期排序

示例数据: 文本(last_modified 括号中的时间戳)

想要的结果:

首先可以接受斜率的短语

  1. 有些人认为这很重要 (2020)
  2. 重要人物:文章(2019)
  3. 关于重要人物的事情 (2018)

那么至少有一个词

  1. 十年来的人物(2020 年)
  2. 重要新闻(2015)

我试过的

我已经通过使用获得了(几乎)想要的结果:

  • 增强函数 (bf) = recip(ms(NOW,last_modified),3.16e-11,1,1)^1500 (不得不使用一个巨大的提升数字来冒泡最近的 结果);

  • 查询字段 qf = 'text^4 title^2';

  • 短语字段 pf = 'text^5 title^2';

  • 短语斜率ps = 4;

  • 查询短语 Slop qs = 2;

  • 最小应匹配 mm = len(split('\s', query)) + 1(前代码)

按空格拆分查询,用 OR 连接确切的短语和每个单独的单词,并将最小应匹配参数 (mm) 设置为 len(split)+1 因此,例如,查询 "apple dog" 转换为"apple dog" or apple or dog。双引号是 qs 参数工作所必需的,并强制结果与确切的短语一起冒泡。

也许我正在使用的方法有一些调整,欢迎任何评论。