1

是否可以根据字段值在索引阶段提升文档?

我正在索引从数据库中提取的文本字段。我想提升较短的结果而不是较长的结果。所以 boost 的值应该取决于文本字段的长度。

这是改变标准 SOLR 行为所必需的,在我的情况下,该行为倾向于首先返回具有多个匹配项的文档。

考虑到我有一个存储文档长度的字段,我在索引时需要的查询中的等价物是:

q={!boost b=sqrt(length)}text:abcd

示例:我在数据库中有两个项目:

ABCDEBCE
ABCD

即使另一个项目包含两次搜索查询,我也总是希望获得ABCD第一个查询。'BC'

该问题的另一个解决方案是能够“关闭”在查询时对多个匹配项进行更高评分的功能。也不知道能不能...

在索引时执行此操作很重要,因为我运行 SOLR 的硬件不是太强大,并且尝试通过 OutOfMemory 异常来提高查询时间返回。(即使我可以解决 java 内存增加的问题,我也更愿意为了安全起见并以最有效的方式实现索引。)

4

2 回答 2

0

是也不是——但你如何做取决于你如何索引你的文档。

据我所知,目前无法仅在 solr 服务器端解决此问题。

如果您使用常规的基于 XML 的界面来提交文档,请让生成提交的 XML 的代码根据文本字段的长度将 boost=".." 值添加到字段或文档中。

于 2012-11-26T13:41:26.553 回答
0

您可以检查具有命令的DIH 特殊$docBoost命令

$docBoost : 提升当前文档。该值可以是数字或数字的 toString

但是,似乎没有$fieldBoost命令。

但是,对于您的情况,如果您使用的是DefaultSimilarity,则较短的字段会比得分计算中的较长字段提升得更高。
您当然可以根据需要使用更改的 TF(词频)和 LengthNorm 计算来实现自己的 Simiarity 类。

于 2012-11-27T03:50:29.087 回答