我的目的是在给定城市(术语)的情况下找到动物(doc)
我以这种方式对文档进行了索引:
doc1(bear) = [city1, city2, city2, city3..]
doc2(dog) = [city1, city1, city1, city2, city2, city2, city3, city3, city3..]
..
我想惩罚出现在许多城市中的(动物)文件,因此不同城市/所有城市比例很高的文件,如“狗”。
有什么建议么?谢谢
我的目的是在给定城市(术语)的情况下找到动物(doc)
我以这种方式对文档进行了索引:
doc1(bear) = [city1, city2, city2, city3..]
doc2(dog) = [city1, city1, city1, city2, city2, city2, city3, city3, city3..]
..
我想惩罚出现在许多城市中的(动物)文件,因此不同城市/所有城市比例很高的文件,如“狗”。
有什么建议么?谢谢
它已经做到了!
默认情况下,norm 函数将较短字段上的匹配视为更精确的匹配,因此对它们的评分高于较长字段。
如果您需要它产生更大的影响,您可以使用自定义版本覆盖 DefaultSimilarity,并修改从 computeNorm 方法返回的值以更重地权衡计算的 lengthNorm 部分。如果您需要这样做,我建议您在现有算法的某处添加一个乘数,但可以根据需要对其进行调整。
笔记!如 API 中所述,此值存储在索引中,而不是在查询时计算。您必须重新索引才能看到更改生效。
computeNorm (3.6.0) 中的计算是:
state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)))
其中 numterms 是字段中的术语总数,而 state 是FieldInvertState。