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