Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr:先按短语slop排序,然后按日期排序_Solr - Fatal编程技术网

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

Solr:先按短语slop排序,然后按日期排序,solr,Solr,我有一个Solr(6.2)Demax Select查询,它使用pf(短语字段)和ps(短语slop) pf=text^2.2 title^2.2,ps=2 我希望我的查询按照以下算法返回结果: 如果查询的短语存在完全匹配项,则首先返回它们,按日期排序 如果有文档至少包含查询短语中的一个单词,则返回第二个单词,按日期排序 示例数据:文本(括号中最后修改的时间戳) 关于重要人物的故事(2018) 重要人物:文章(2019) 有些人认为这很重要(2020年) 重要新闻(2015) 十年人物(2020

我有一个Solr(6.2)Demax Select查询,它使用pf(短语字段)和ps(短语slop)

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

我希望我的查询按照以下算法返回结果:

  • 如果查询的短语存在完全匹配项,则首先返回它们,按日期排序
  • 如果有文档至少包含查询短语中的一个单词,则返回第二个单词,按日期排序
  • 示例数据:文本(括号中最后修改的时间戳)

    • 关于重要人物的故事(2018)
    • 重要人物:文章(2019)
    • 有些人认为这很重要(2020年)
    • 重要新闻(2015)
    • 十年人物(2020年)
    所需结果

    首先是具有可接受斜率的短语

  • 有些人认为这很重要(2020年)
  • 重要人物:文章(2019)
  • 关于重要人物的故事(2018)
  • 然后至少有一个词

  • 十年人物(2020年)
  • 重要新闻(2015)
  • 我所尝试的

    • 将查询包装成双引号,并使用
      qs
      (查询短语slop),这样它可以按需要工作,但忽略了“至少在单词上”部分
    • 使用bq(boost查询),如
      last\u modified:[NOW/DAY-3个月到NOW/DAY]^20.0
    • 使用bf(升压功能),如
      recip(ms(现在,最后一次修改),3.16e-11,1,1)
    • 显式
      last\u modified desc
      sort-但它完全忽略分数
    • 使用多重排序
      score desc,最后一次修改desc
      ——但第二次排序仅在第一次排序有平局时有效(而且几乎没有平局)
    我已经通过使用以下方法获得了(几乎)想要的结果:

    • 增强功能(bf)=
      recip(ms(现在,上次修改),3.16e-11,1,1)^1500
      (不得不使用一个巨大的助推数字来激发最近的 结果)

    • 查询字段qf=
      “文本^4标题^2”

    • 短语字段pf=
      “文本^5标题^2”

    • 短语Slop ps=4

    • 查询短语Slop qs=2

    • 最小值应与mm=
      len(拆分('\s',查询))+1
      (预udocode)匹配

    按空格分割查询,将精确短语和每个单独的单词与或连接,并设置最小值,使参数(mm)与len(Split)+1匹配,例如,查询“apple dog”转换为
    “apple dog”或apple或dog
    。双引号对于qs参数起作用和强制具有精确短语的结果冒泡是必需的

    也许我正在使用的方法有一些调整,任何评论都将不胜感激