gpt4 book ai didi

elasticsearch - Lucene 自定义相似度/评分

转载 作者:行者123 更新时间:2023-12-02 23:34:01 25 4
gpt4 key购买 nike

我正在寻找 Lucene (Java) 中的相似性模块,它给出基于权重的分数。我知道这很模糊,最好用一个例子来解释。

Document 1
-----------
Firstname: Francesca

Document 2
-----------
Firstname: Francisco

Firstname 字段使用 Doublemetaphone 和 Refined Soundex 语音算法进行分析。在索引阶段。

因此,倒排索引看起来像这样(最后两项分别由 Doublemetaphone 和 REfined Soundex 给出):
francesca ===> Doc1
francisco ===> Doc2
FRNS ===> Doc1, Doc2
F29083030 ===> Doc1
F2908306 ===> Doc2

现在我的搜索查询如下所示:
名字:“弗朗西斯卡”

显然,对于 Doc1,所有 4 个术语都匹配。对于每场比赛,我想给出 25% 的百分比(我事先知道给定术语最多只能有 4 个扩展术语。

按照这个原则,我想给出以下分数:
Doc1 (100)  [Reason: All 4 terms match]
Doc2 (25) [Reason: Only FRNS term matches, rest don't match]

现在我的问题是,为了实现这一点,是否有现成的相似性模块可用?如果没有,我相信我应该扩展 DefaultSimilarity 并覆盖必要的方法。但是调用相似度模块并总结每个文档的所有分数的模块在哪里呢?我问的原因是我也会将这种基于权重的评分扩展到其他领域,在这种情况下,每个文档的总分将是各个领域的加权平均值之和。因此,我还应该自定义汇总各个字段分数的代码并覆盖它以找到平均值。有人可以指点一下吗?谢谢。

最佳答案

Jörg Praante 项目是一个很好的起点 - https://github.com/jprante/elasticsearch-payload

与其他项目一起,他还扩展了相似性模块。

进一步关于实现,我建议您查看 token 的类型字段或有效负载字段以推断分数。

在以下文件中 - https://github.com/jprante/elasticsearch-payload/blob/master/src/main/java/org/xbib/elasticsearch/plugin/payload/PayloadPlugin.java

您可以查看以下有关如何添加相似性模块的代码示例。

public void onModule(SimilarityModule module) {
module.addSimilarity("payload_similarity", PayloadSimilarityProvider.class);
}

关于elasticsearch - Lucene 自定义相似度/评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33466810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com