【问题标题】:solr score document that has all terms the same regardless of frequency of termssolr 分数文档,无论术语的频率如何,所有术语都相同
【发布时间】:2026-01-24 10:55:01
【问题描述】:

我对如何从 solr 排序返回结果有一个要求。在高层次上,它们应该如下所示:

  • subset1 字段的完全匹配,按日期排序
  • subset2 字段的完全匹配,按日期排序
  • subset1 字段的部分匹配按日期排序
  • subset2 字段的部分匹配按日期排序
  • subset1 字段的模糊匹配按日期排序
  • subset2 字段的模糊匹配按日期排序

目前我正在排序 solr 分数,然后是日期。当我查询 solr 时,我使用了一个 boost 函数,它对旧文档进行反向提升,因此它们被向下移动,而新文档也“浮动”到顶部,并且我正在提升适当的字段,以便我得到精确、部分和以正确的顺序进行模糊匹配。这让我大部分时间到达那里。

现在是棘手的部分。该要求规定,如果我搜索“red ford truck”之类的内容,则包含“red ford truck”的文档,无论术语的频率如何,都应该得到相同的评分。将较新的文档提升到顶部不会对分数产生足够的影响,无法将具有较高词频的文档推到足够低的程度。

例如,假设我有 2 个文档: 文档 1:

  • Field1:“红色福特卡车真的很红,而且是一辆快车”
  • 日期:2010 年 1 月 1 日

文档 2:

  • 字段 1:“红色福特卡车停在街上”
  • 日期:2012 年 1 月 10 日

当我搜索“red ford truck”时,我希望文档 2 首先出现,因为它较新并且包含所有查询词。当前文档 1 将首先出现,因为它在 Field1 中有更多匹配项,并且反向提升不足以将其向下推。

所以现在我的问题是 solr 中是否有一个配置点来告诉它在查询的术语上只匹配一次文档?有点像 T-SQL 中的 Exists。

如果有任何其他有用的信息,请告诉我,并提前感谢您的时间。

【问题讨论】:

    标签: solr


    【解决方案1】:

    由于术语频率和字段长度,这些分数不同。

    omitNorms 似乎您正在寻找有关字段长度的内容。查看this 之前的答案,并记住该字段的索引时间提升也将被禁用:

    如果为真,则省略与该字段相关的规范(这会禁用 字段的长度标准化和索引时间提升,并保存 一些记忆)。

    omitTermFreqAndPositions 似乎是您正在寻找的关于词频的内容:

    如果为真,则从帖子中省略词频、位置和有效负载 对于这个领域。这对于不支持的字段可能会提高性能 需要该信息。它还减少了所需的存储空间 为索引。依赖于发出的位置的查询 使用此选项的字段将默默地无法找到文档。这 对于所有非文本字段的属性,属性默认为 true。

    【讨论】:

    • 感谢您的回复。 omitTerFreqAndPositions 有点帮助,但我实际上也关心位置。因为我希望仅将“红色福特卡车”排序在“红色福特皮卡车”之上。除非我误解了“位置”部分,但它似乎就是这样做的。
    • 我明白了...好吧,您可以尝试将 omitNorms 和 omitTermFreqAndPositions 以不同方式组合并使用它们。我不知道任何没有职位的 omitTermFreq,即使我已经阅读了有关它的讨论。祝你好运!
    • 你能不能给我指出其中的一些讨论,看看我是否可以为这个问题设计一个策略?
    • 看看here,我发现它在谷歌上搜索。
    • 顺便说一句...对不起,如果答案有用,也许你至少可以投票。