1

我的目的是在给定城市(术语)的情况下找到动物(doc)

我以这种方式对文档进行了索引:

doc1(bear)  = [city1, city2, city2, city3..]
doc2(dog)   = [city1, city1, city1, city2, city2, city2, city3, city3, city3..]
..

我想惩罚出现在许多城市中的(动物)文件,因此不同城市/所有城市比例很高的文件,如“狗”。

有什么建议么?谢谢

4

1 回答 1

2

它已经做到了!

请参阅Similarity.computeNorm

默认情况下,norm 函数将较短字段上的匹配视为更精确的匹配,因此对它们的评分高于较长字段。

如果您需要它产生更大的影响,您可以使用自定义版本覆盖 DefaultSimilarity,并修改从 computeNorm 方法返回的值以更重地权衡计算的 lengthNorm 部分。如果您需要这样做,我建议您在现有算法的某处添加一个乘数,但可以根据需要对其进行调整。

笔记!如 API 中所述,此值存储在索引中,而不是在查询时计算。您必须重新索引才能看到更改生效。


computeNorm (3.6.0) 中的计算是:

state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)))

其中 numterms 是字段中的术语总数,而 state 是FieldInvertState

于 2012-12-12T17:56:32.140 回答