SOLR索引时间提升取决于字段值

时间:2012-11-26 13:34:51

标签: solr indexing scoring

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

我正在索引从数据库中提取的文本字段。我想提高比较长的结果更短的结果。因此,boost的值应取决于文本字段的长度。

这需要改变标准的SOLR行为,在我的情况下往往首先返回多个匹配的文档。

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

  

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

实施例: 我在DB中有两个项目:

ABCDEBCE
ABCD

我总是希望ABCD首先获得'BC'查询,即使其他项目包含搜索查询两次。

该问题的另一个解决方案是能够“关闭”在查询时将多个匹配得分更高的功能。不知道这是否可能......

在索引时执行此操作非常重要,因为我运行SOLR的硬件功能不是太强大,并尝试使用OutOfMemory Exception来提升查询时间。 (即使我可以解决java增加的内存问题,我更喜欢安全,并以最有效的方式实现索引。)

2 个答案:

答案 0 :(得分:0)

是和否 - 但您如何操作取决于您如何索引文档。

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

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

答案 1 :(得分:0)

您可以查看DIH Special Commands具有$docBoost命令

DefaultSimilarity
  

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

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

但是,对于您的情况,如果您使用的是{{3}},则会在分数计算中将较短的字段提高到较长的字段。
您可以根据需要使用更改的TF(术语频率)和LengthNorm计算来实现您自己的Simiarity类。