是否可以根据字段值在索引阶段提升文档?
我正在索引从数据库中提取的文本字段。我想提高比较长的结果更短的结果。因此,boost的值应取决于文本字段的长度。
这需要改变标准的SOLR行为,在我的情况下往往首先返回多个匹配的文档。
考虑到我有一个存储文档长度的字段,在查询索引时需要的等价物是:
q = {!boost b = sqrt(length)} text:abcd
实施例: 我在DB中有两个项目:
ABCDEBCE
ABCD
我总是希望ABCD
首先获得'BC'
查询,即使其他项目包含搜索查询两次。
该问题的另一个解决方案是能够“关闭”在查询时将多个匹配得分更高的功能。不知道这是否可能......
在索引时执行此操作非常重要,因为我运行SOLR的硬件功能不是太强大,并尝试使用OutOfMemory Exception来提升查询时间。 (即使我可以解决java增加的内存问题,我更喜欢安全,并以最有效的方式实现索引。)
答案 0 :(得分:0)
是和否 - 但您如何操作取决于您如何索引文档。
据我所知,目前无法在solr服务器端解决此问题。
如果您使用常规的基于XML的界面来提交文档,请让生成提交的XML的代码根据文本字段的长度向字段或文档添加boost =“..”值。 / p>
答案 1 :(得分:0)
您可以查看DIH Special Commands具有$docBoost
命令
$ docBoost:提升当前的doc。值可以是数字或 toString的数字
但是,似乎没有$fieldBoost
命令。
但是,对于您的情况,如果您使用的是{{3}},则会在分数计算中将较短的字段提高到较长的字段。
您可以根据需要使用更改的TF(术语频率)和LengthNorm计算来实现您自己的Simiarity类。