我对如何从 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 。
如果有任何其他有用的信息,请告诉我,并提前感谢您的时间。