我正在寻找Lucene(Java)中的相似性模块,该模块给出了基于权重的分数。我知道这很模糊,最好用一个例子来解释。
Document 1
-----------
Firstname: Francesca
Document 2
-----------
Firstname: Francisco
使用Doublemetaphone& amp; amp; amp; amp;精制Soundex语音算法。在索引阶段。
因此,倒排索引看起来像这样(最后两个术语分别由Doublemetaphone和REfined Soundex给出):
francesca ===> Doc1
francisco ===> Doc2
FRNS ===> Doc1, Doc2
F29083030 ===> Doc1
F2908306 ===> Doc2
现在我的搜索查询如下所示: 名字:" francesca"
显然,对于Doc1,所有4个术语都匹配。对于每场比赛,我想给出25%的百分比(我事先知道在给定的期限内最多只能有4个扩展术语。
按照这个原则,我想给出以下分数:
Doc1 (100) [Reason: All 4 terms match]
Doc2 (25) [Reason: Only FRNS term matches, rest don't match]
现在我的问题是,要实现这一目标,是否有现成的相似模块?如果没有,我相信我应该扩展DefaultSimilarity并覆盖必要的方法。但是调用相似性模块的模块在哪里并且总结了每个文档的所有分数?我问的原因是我也会根据其他领域的分数来扩展这个权重,在这种情况下,每个文档的总分将是各个领域的加权平均值之和。因此,我还应该自定义代码来总结各个字段的分数并覆盖它以找到平均值。有人能指出一些指示吗?感谢。
答案 0 :(得分:1)
开始这个的好地方是JörgPrante项目 - https://github.com/jprante/elasticsearch-payload
除了其他项目,他还扩展了相似性模块。
关于实施,我建议您查看令牌的类型字段或有效负载字段以推断得分。
您可以看到有关如何添加相似性模块的以下代码示例。
public void onModule(SimilarityModule module) {
module.addSimilarity("payload_similarity", PayloadSimilarityProvider.class);
}