2

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

  • 对按日期排序的子集 1 字段的完全匹配
  • 对按日期排序的子集 2 字段的完全匹配
  • 按日期排序的子集 1 字段的部分匹配
  • 按日期排序的子集 2 字段的部分匹配
  • 对按日期排序的子集 1 字段的模糊匹配
  • 对按日期排序的子集 2 字段的模糊匹配

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

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

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

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

文件 2:

  • Field1:“红色福特卡车停在街上”
  • 日期:1/10/2012

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

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

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

4

1 回答 1

2

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

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

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

omitTermFreqAndPositions似乎您正在寻找关于术语频率的内容:

如果为 true,则忽略此字段的发布中的术语频率、位置和有效负载。对于不需要该信息的字段,这可以提高性能。它还减少了索引所需的存储空间。依赖于使用此选项在字段上发出的位置的查询将默默地找不到文档。对于所有非文本字段的字段,此属性默认为 true。

于 2012-08-02T08:27:45.590 回答