使用优化版的编辑距离算法替代ES默认的评分算法

server/2025/3/1 5:26:46/

优化版编辑距离算法

java">    public static int minDistance(String str, String str1) {int len = str.length(), len1 = str1.length();// 预处理char[] arr1 = str.toCharArray();char[] arr2 = str1.toCharArray();// 动态规划数组int[] dp = new int[len1 + 1];for (int j = 0; j <= len1; j++) dp[j] = j;for (int i = 1; i <= len; i++) {int prevDiagonal = dp[0];dp[0] = i;char c1 = arr1[i-1];for (int j = 1; j <= len1; j++) {int cost = (c1 == arr2[j-1]) ? 0 : 1;int newVal = dp[j] + 1;newVal = newVal < dp[j-1] + 1 ? newVal : dp[j-1] + 1;newVal = newVal < prevDiagonal + cost ? newVal : prevDiagonal + cost;prevDiagonal = dp[j];dp[j] = newVal;}}return dp[len1];}

ES自定义评分脚本

java">## 库名称:zhCNenUS-基建化工-油气-木木有限公司23456crm-QM、zhCNenUS-汽车-汽车-木木有限公司23456crm-QM
POST /tm/_search
{"query": {"bool": {"filter": [{ "terms": { "dbId": ["101476","110316"] }},{ "match": { "original": {"query": "姓名:上云测试用户01","minimum_should_match": "69%"}}}],"must": [{ "function_score": {"functions": [{ "script_score": {"script": {"source": """// 定义相似度计算函数(放于脚本顶部,str1是请求参数)double calculate(String str, String str1) {// 快速返回条件if (str == null || str1 == null || str.isEmpty() || str1.isEmpty()) return 10.0;int len = str.length(), len1 = str1.length();int minLen = len < len1 ? len : len1;int maxLen = len < len1 ? len1 : len;double ratio = (double)minLen / maxLen;if(ratio < 0.7) {return 30;}String strLower = str.toLowerCase();String str1Lower = str1.toLowerCase();if(str.equals(str1)){return 100;}if(strLower.equals(str1Lower)){return 90;}// 预处理char[] arr1 = strLower.toCharArray();char[] arr2 = str1Lower.toCharArray();// 动态规划数组int[] dp = new int[len1 + 1];for (int j = 0; j <= len1; j++) dp[j] = j;for (int i = 1; i <= len; i++) {int prevDiagonal = dp[0];dp[0] = i;char c1 = arr1[i-1];for (int j = 1; j <= len1; j++) {int cost = (c1 == arr2[j-1]) ? 0 : 1;// 取最小值int newVal = dp[j] + 1;newVal = newVal < dp[j-1] + 1 ? newVal : dp[j-1] + 1;newVal = newVal < prevDiagonal + cost ? newVal : prevDiagonal + cost;prevDiagonal = dp[j];dp[j] = newVal;}}return 80.0 * (1.0 / dp[len1]);}String es1 = doc['original.keyword'].value;String es2 = doc['translation.keyword'].value;String str1 = params.val1;String str2 = params.val2;// 计算纯文本的评分double textRatio = calculate(es1, str1);// 计算标签格式的评分double tagRatio = calculate(es2, str2);// 如果原文没有标签,语料有标签,则需要扣分if(str2.length()==0 && es2.length()!=0) {tagRatio=-tagRatio;}// 根据情况调整权重return textRatio + 0.1 * tagRatio;""","params": {"val1": "姓名:上云测试用户01","val2": "<1>4<2/>4</1>"}}}}],"boost_mode": "replace"}}]}}
}


http://www.ppmy.cn/server/171474.html

相关文章

Rust ~ Vec<u8>和[u8]

Vec<u8> 和 &[u8] 是两种不同的数据类型&#xff0c;它们都与字节序列相关&#xff0c;但在所有权、内存管理、使用场景等方面存在明显区别 类型本质 Vec<u8>&#xff1a;Rust 中的动态数组类型&#xff0c;即向量&#xff08;vector&#xff09;。它是一个拥…

二、IDE集成DeepSeek保姆级教学(使用篇)

各位看官老爷好&#xff0c;如果还没有安装DeepSeek请查阅前一篇 一、IDE集成DeepSeek保姆级教学(安装篇) 一、DeepSeek在CodeGPT中使用教学 1.1、Edit Code 编辑代码 选中代码片段 —> 右键 —> CodeGPT —> Edit Code, 输入自然语言可编辑代码&#xff0c;点击S…

Python的PyTorch+CNN深度学习技术在人脸识别项目中的应用

人脸识别技术是一种基于人脸特征进行身份识别的生物识别技术&#xff0c;其核心原理包括人脸检测、人脸对齐、特征提取、特征匹配、身份识别。 一、应用场景 安防&#xff1a;门禁、监控。 金融&#xff1a;刷脸支付、身份验证。 社交&#xff1a;自动标注、美颜。 医疗&am…

深入解析:使用Python爬虫获取京东商品详情原数据API接口

在电商数据分析、竞品研究以及用户体验优化等领域&#xff0c;获取商品详情数据是至关重要的一步。京东作为国内领先的电商平台&#xff0c;提供了丰富的API接口供开发者使用。本文将详细介绍如何通过Python爬虫技术调用京东商品详情API接口&#xff0c;获取商品的原数据&#…

【Day48 LeetCode】图论问题 Ⅵ

一、图论问题 Ⅵ 1、拓扑排序–软件构建 拓扑排序是将一个有向图转成线性的排序&#xff0c;需要判断有向图中是否存在环。这个比较经典的问题就是leetcode里207 课程表。和这题异曲同工。 思路就是&#xff1a;记录每个节点的入度&#xff0c;以及当前节点的下一个节点。优先…

java23种设计模式-策略模式

策略模式(Strategy Pattern)学习笔记 编程相关书籍分享:https://blog.csdn.net/weixin_47763579/article/details/145855793 DeepSeek使用技巧pdf资料分享:https://blog.csdn.net/weixin_47763579/article/details/145884039 🌟 模式定义 策略模式是一种行为型设计模式,…

echarts 环形图 指定区域从右侧中心点展开

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>ECharts 环形图不合理区域展示<…

IP-----动态路由OSPF

这只是IP的其中一块内容&#xff0c;IP还有更多内容可以查看IP专栏&#xff0c;前一章内容为GRE和MGRE &#xff0c;可通过以下路径查看IP-------GRE和MGRE-CSDN博客,欢迎指正 注意&#xff01;&#xff01;&#xff01;本部分内容较多所以分成了两部分在下一章 5.动态路由OS…