谈谈 ES 6.8 到 7.10 的功能变迁(6)- 其他
这是 ES 7.10 相较于 ES 6.8 新增内容的最后一篇,主要涉及算分方法和同义词加载的部分。
自定义算分:script_score 2.0
Elasticsearch 7.0 引入了新一代的函数分数功能,称为 script_score 查询。这一新功能提供了一种更简单、更灵活的方式来为每条记录生成排名分数。script_score 查询由一组函数构成,包括算术函数和距离函数,用户可以根据需要混合和匹配这些函数,以构建任意的分数计算逻辑。这种模块化的结构使得使用更加简便,同时也为更多用户提供了这一重要功能的访问权限。通过 script_score,用户可以根据复杂的业务逻辑自定义评分,而不仅仅依赖于传统的 TF-IDF 或 BM25 算法。例如,可以根据文档的地理位置、时间戳、或其他自定义字段的值来调整评分,从而更精确地控制搜索结果的排序。
script_score 是 ES 对 function score 功能的一个迭代替换。
常用函数
基本函数
用于对字段值或评分进行基本的数学运算。
doc[<field>].value 获取文档中某个字段的值。
"script": {"source": "doc['price'].value * 1.2"}
算术运算
支持加 (+)、减 (-)、乘 (*)、除 (/)、取模 (%) 等操作。
"script": {"source": "doc['price'].value + (doc['discount'].value * 0.5)"}
Saturation 函数
saturation 函数用于对字段值进行饱和处理,限制字段值对评分的影响范围。
"script": {"source": "saturation(doc['<field_name>'].value, <pivot>)"
}
<field_name>: 需要处理的字段。<pivot>: 饱和点(pivot),当字段值达到该值时,评分增益趋于饱和。
//在这个示例中,`likes` 字段的值在达到 `100` 后,对评分的影响会趋于饱和。
{"query": {"script_score": {"query": {"match_all": {}},"script": {"source": "saturation(doc['likes'].value, 100)"}}}
}
Sigmoid 函数
sigmoid 函数用于对字段值进行 S 形曲线变换,平滑地调整字段值对评分的影响。
"script": {"source": "sigmoid(doc['<field_name>'].value, <pivot>, <exponent>)"
}
- <field_name> 需要处理的字段。
- 中心点(pivot),S 形曲线的中点。
- 指数,控制曲线的陡峭程度。
//在这个示例中,`likes` 字段的值在 `50` 附近对评分的影响最为显著,而随着值远离 `50`,影响会逐渐平滑。
{"query": {"script_score": {"query": {"match_all": {}},"script": {"source": "sigmoid(doc['likes'].value, 50, 0.5)"}}}
}
距离衰减函数
用于衰减计算地理位置的函数。
//相关函数
double decayGeoLinear(String originStr, String scaleStr, String offsetStr, double decay, GeoPoint docValue)
double decayGeoExp(String originStr, String scaleStr, String offsetStr, double decay, GeoPoint docValue)
double decayGeoGauss(String originStr, String scaleStr, String offsetStr, double decay, GeoPoint docValue)"script" : {"source" : "decayGeoExp(params.origin, params.scale, params.offset, params.decay, doc['location'].value)","params": {"origin": "40, -70.12","scale": "200km","offset": "0km","decay" : 0.2}
}
数值衰减函数
用于衰减计算数值的函数。
//相关函数
double decayNumericLinear(double origin, double scale, double offset, double decay, double docValue)
double decayNumericExp(double origin, double scale, double offset, double decay, double docValue)
double decayNumericGauss(double origin, double scale, double offset, double decay, double docValue)"script" : {"source" : "decayNumericLinear(params.origin, params.scale, params.offset, params.decay, doc['dval'].value)","params": {"origin": 20,"scale": 10,"decay" : 0.5,"offset" : 0}
}
日期衰减函数
用于衰减计算日期的函数。
//相关函数
double decayDateLinear(String originStr, String scaleStr, String offsetStr, double decay, JodaCompatibleZonedDateTime docValueDate)
double decayDateExp(String originStr, String scaleStr, String offsetStr, double decay, JodaCompatibleZonedDateTime docValueDate)
double decayDateGauss(String originStr, String scaleStr, String offsetStr, double decay, JodaCompatibleZonedDateTime docValueDate)"script" : {"source" : "decayDateGauss(params.origin, params.scale, params.offset, params.decay, doc['date'].value)","params": {"origin": "2008-01-01T01:00:00Z","scale": "1h","offset" : "0","decay" : 0.5}
}
随机函数
用于生成随机评分。
randomNotReproducible` 生成一个随机评分。
"script" : {"source" : "randomNotReproducible()"}
randomReproducible 使用种子值生成可重复的随机评分。
"script" : {"source" : "randomReproducible(Long.toString(doc['_seq_no'].value), 100)"}
字段值因子
用于根据字段值调整评分。
field_value_factor` 根据字段值调整评分。
"script" : {"source" : "Math.log10(doc['field'].value * params.factor)",params" : {"factor" : 5}}
其他实用函数
- Math.log:计算对数,
Math.log(doc['price'].value) - Math.sqrt:计算平方根,
Math.sqrt(doc['popularity'].value) - Math.pow:计算幂次,
Math.pow(doc['score'].value, 2)
同义词字段重加载
Elasticsearch 7.3 引入了同义词字段重加载功能,允许用户在更新同义词文件后,无需重新索引即可使更改生效。
这一功能极大地简化了同义词管理的流程,尤其是在需要频繁更新同义词的场景下。通过 _reload_search_analyzers API,用户可以重新加载指定索引的分词器,从而使新的同义词规则立即生效。
注意,虽然同义词词典能被热加载,但是已经生成的索引数据不会被修改。
测试代码
PUT /my_index
{"settings": {"index" : {"analysis" : {"analyzer" : {"my_synonyms" : {"tokenizer" : "whitespace","filter" : ["synonym"]}},"filter" : {"synonym" : {"type" : "synonym_graph","synonyms_path" : "analysis/synonym.txt","updateable" : true}}}}},"mappings": {"properties": {"text": {"type": "text","analyzer" : "standard","search_analyzer": "my_synonyms"}}}
}POST /my_index/_reload_search_analyzers
执行上述请求后,Elasticsearch 会重新加载 my_index 索引的分析器,使最新的同义词规则生效。
case insensitive 参数
case_insensitive 参数允许用户在执行精确匹配查询时忽略大小写。
这一功能特别适用于需要处理大小写不敏感数据的场景,例如用户名、标签或分类代码等。通过设置 case_insensitive 为 true,用户可以在不修改数据的情况下,实现对大小写不敏感的查询,从而简化查询逻辑并提高搜索的准确性。
测试代码
//在这个示例中,`term` 查询会匹配 `user` 字段值为 `JohnDoe`、`johndoe` 或 `JOHNDOE` 的文档,而忽略大小写差异。
{"query": {"term": {"user": {"value": "JohnDoe","case_insensitive": true}}}
}
小结
Elasticsearch 作为一款强大的开源搜索和分析引擎,其版本的不断迭代带来了诸多显著的改进与优化。对比 Elasticsearch 6.8,Elasticsearch 7.10 在多个方面展现出了新的功能和特性,极大地提升了用户体验和系统性能。这系列文章简短的介绍了各个方面的新功能和优化,希望能给大家一定的帮助。
推荐阅读
- 谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇
- 谈谈 ES 6.8 到 7.10 的功能变迁(2)- 字段类型篇
- 谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇
- 谈谈 ES 6.8 到 7.10 的功能变迁(4)- 聚合功能篇
- 谈谈 ES 6.8 到 7.10 的功能变迁(5)- 任务和集群管理
相关文章:
谈谈 ES 6.8 到 7.10 的功能变迁(6)- 其他
这是 ES 7.10 相较于 ES 6.8 新增内容的最后一篇,主要涉及算分方法和同义词加载的部分。 自定义算分:script_score 2.0 Elasticsearch 7.0 引入了新一代的函数分数功能,称为 script_score 查询。这一新功能提供了一种更简单、更灵活的方式来…...
huggingface下载模型到本地缓存环境变量配置详解
1.安装huggingface-cli 命令行工具,进行模型文件下载 pip install -U huggingface_hub huggingface-cli --help 帮助命令 2.从huggingface下载模型方法 方法1: git clone 下载模型 方法2:huggingface-cli 工具下载模型 方法3&…...
u-boot的环境变量设置、保存、汇总与说明【同时对u-boot的环境变量`bootcmd`和网络启动(run netboot)方式进行了详细解释】
前言 在 U-Boot 中,环境变量用于配置系统的启动参数和行为。是否能正确理解和设置u-boot中的环境变量是启动Linux系统的关键,所以有必要认真学习了解下各环境变量的意思和作用。 最好的学习材料就是实际的例子,所以本篇博文把我遇到过的各个…...
【后端】Docker一本通
长期更新补充,建议关注收藏点赞 目录 Docker概述安装部署Docker基本操作使用docker部署tomcat使用docker部署mysql Docker概述 docker是⼀个应⽤级隔离的虚拟化技术docker三大核心概念 镜像:是具有源的所有特征的⼀个标记⽂件 仓库:存放镜像…...
基于Spring Boot和Vue的餐饮管理系统设计与实现
大家好,今天要和大家聊的是一款基于Spring Boot和Vue的餐饮管理系统的设计与实现。项目源码以及部署相关事宜请联系我,文末附上联系方式。 项目简介 基于Spring Boot和Vue的餐饮管理系统设计与实现的主要使用者分为管理员、员工和用户。没有授权的用户无…...
如何快速的解除oracle dataguard
有些时候,我们为了使oracle dg的standby库另做他用,需要解除oracle dataguard数据同步。我本地因为standby库存储出现故障,导致dg存在问题,故需要解除。今天,我们通过使用部分命令,实现dg的快速解除。 1&a…...
C语言【指针篇】(四)
前言:正文1. 字符指针变量2. 数组指针变量2.1 数组指针变量是什么?2.2 数组指针变量怎么初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 两段有趣的代码4.3.1 typedef关键字 5. 函数指针数组6. 转移表 总结 前言&am…...
Python基于Django的网络课程在线学习平台【附源码】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
vscode集成DeepSeek
vscode 扩展 安装 Cline Meet Cline,一个可以使用你的CLI和编辑器的AI助手。 得益于 Claude 3.5 Sonnet的代理编码功能,Cline 可以逐步处理复杂的软件开发任务。借助让他创建和编辑文件、探索大型项目、使用浏览器和执行终端命令(在您授予权限后)的工具&…...
【TCAD】Sentaurus 中的“陷阱trap”仿真设置
13.1 陷阱类型 13.2 定义陷阱 13.3 陷阱态密度的类型 13.4 陷阱空间分布 13.5 陷阱占据 13.6 陷阱横截面 13.7 陷阱作为掺杂 13.8 陷阱填充控制 13.9 陷阱可视化 目标 演示如何使用 Sentaurus 设备在模拟中使用陷阱。13.1 陷阱类型...
Lucene硬核解析专题系列(三):查询解析与执行
Lucene的索引构建为高效搜索奠定了基础,而查询解析与执行则是将用户意图转化为实际结果的关键环节。本篇将从查询的解析开始,逐步深入到查询类型、评分模型和执行流程,揭示Lucene搜索能力的底层原理。 一、查询语法与QueryParser的工作原理 Lucene的查询过程始于用户输入的…...
Linux操作系统5-进程信号3(信号产生总结与核心转储)
上篇文章:Linux操作系统5-进程信号2(信号的4种产生方式,signal系统调用)-CSDN博客 本篇Gitee仓库:myLerningCode/l25 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点:核心…...
家用可燃气体探测器——家庭燃气安全的坚实防线
随着社会的发展和变迁,天然气为我们的生活带来了诸多便利,无论是烹饪美食,还是温暖取暖,都离不开它的支持。然而,燃气安全隐患如影随形,一旦发生泄漏,可能引发爆炸、火灾等严重事故,…...
【学习笔记】网络设备(华为交换机)基础知识 9 —— 堆叠配置
提示:学习华为交换机堆叠配置,含堆叠的概念、功能、角色、ID和优先级;堆叠的建立过程以及注意事项;包含堆叠的配置命令,以及堆叠的配置案例 一、前期准备 1.已经可以正常访问交换机的命令行接口 Console口本地访问教…...
【Linux】Linux的进程控制
目录 1. 学习思维导图 2.进程创建(fork) 2.1 fork创建进程失败 3.进程终止 3.1 进程退出情况 3.1.1main函数 3.1.2 退出码 3.2 exit/_exit函数 1. exit() 函数 2. _exit() 函数 4.进程等待 4.1 实现进程等待的方法 wait/waitpid方法 区别&a…...
电子电气架构 --- 汽车行业技术变革
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...
【告别双日期面板!一招实现el-date-picker智能联动日期选择】
告别双日期面板!一招实现el-date-picker智能联动日期选择 1.需求背景2.DateTimePicker 现状图3.日期选择器实现代码4.日期选择器实现效果图5.日期时间选择器实现代码6.日期时间选择器实现效果图 1.需求背景 在用户使用时间查询时,我们经常需要按月份筛选…...
利用 Python 爬虫进行跨境电商数据采集
1 引言2 代理IP的优势3 获取代理IP账号4 爬取实战案例---(某电商网站爬取)4.1 网站分析4.2 编写代码4.3 优化代码 5 总结 1 引言 在数字化时代,数据作为核心资源蕴含重要价值,网络爬虫成为企业洞察市场趋势、学术研究探索未知领域…...
2. 在后端代码中加入日志记录模块
1. 说明 日志模块基本上是每一个软件系统开发中必不可少的,主要用于持久记录一些代码运行中的输出信息,辅助编码人员进行代码调试,以及后期软件上线运行报错分析。在Python中加入日志模块比较简单,只需要借助logging和RotatingFi…...
C++ 17 允许在 for 循环,if 语句,switch 语句中初始化变量
看到 c 有这个特性,python 和 java 似乎都没有,根据 AI 的回答进行了一些整理总结。 文章目录 **1. 在 for 循环中初始化变量****特点****多个变量初始化** **2. 在 if 语句中初始化变量(C17 及以上)****示例****特点** **3. 在 s…...
Pycharm中怎么加快下载三方包速度
Pycharm中怎么加快下载三方包速度 使用命令行下载,-i pip install transformers -i https://mirrors.aliyun.com/pypi/simple/ 在Windows系统的PyCharm中使用Python 3.12环境时,可通过以下几种方式配置不同镜像源来加快下载包的速度。 方式一:在PyCharm界面中直接配置镜…...
Transformer 代码剖析7 - 词元嵌入(TokenEmbedding) (pytorch实现)
一、类定义与继承关系剖析 1.1 代码结构图示 #mermaid-svg-9COHbtmHJhpiroHM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9COHbtmHJhpiroHM .error-icon{fill:#552222;}#mermaid-svg-9COHbtmHJhpiroHM .error-t…...
Unity中动态切换光照贴图的方法
关键代码:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter27-工作者线程
二十七、工作者线程 工作者线程 前端开发者常说:“JavaScript 是单线程的。”这种说法虽然有些简单,但描述了 JavaScript 在浏览器中的一般行为。因此,作为帮助 Web 开发人员理解 JavaScript 的教学工具,它非常有用。单线程就意味…...
Qt基于等待条件QWaitCondition实现的任务队列模型示例
核心概念 Qt中的QWaitCondition是一个用于多线程同步的类,允许线程在某些条件满足时唤醒其他等待的线程。它通常与QMutex配合使用,协调线程之间的执行顺序,适用于生产者-消费者模型、任务队列调度等场景。 wait():使当前线程进…...
本地大模型编程实战(26)用langgraph实现基于SQL数据构建的问答系统(5)
本文将将扩展上一篇文章完成的 langgraph 链,继续使用基于 langgraph 链 ,对结构化数据库 SQlite 进行查询的方法。该系统建立以后,我们不需要掌握专业的 SQL 技能,可以用自然语言询问有关数据库中数据的问题并返回答案。主要完善…...
【RAG生成】生成模块核心技术解密:从理论到实践的全链路优化
RAG知识系列文章 【RAG实践】手把手Python实现搭建本地知识问答系统【RAG进阶】从基础到模块化:深度解析RAG技术演进如何重塑AI知识边界【RAG检索】RAG技术揭秘:检索≠召回?【RAG增强】解密RAG系统排序优化:从基础原理到生产实践…...
近似最近邻(ANN)算法库实战
引言:从“精确”到“近似”的思维跃迁 在电商推荐系统中,每秒需要为上百万用户找到最相关的商品——传统KNN的暴力搜索甚至无法完成一次查询,而近似最近邻(ANN)算法库如Faiss(Facebook)和Annoy…...
Linux与UDP应用2:简易聊天室
UDP应用2:简易聊天室 本篇介绍 在前面的基本使用过程中已经完成了本地和网络通信,既然一个人和一台服务器可以进行通信,那么多个人连接一台服务器也可以和这台服务器实现通信。在这个基础上,如果服务器可以将某个人发给服务器的…...
张雪峰教育观点及争议分析
李升伟 整理 张雪峰(网络常用名,本名张子彪)是中国知名的考研辅导教师、教育领域自媒体人,因其幽默犀利的语言风格和直击痛点的教育观点走红网络。以下是对他的基本介绍及综合评价: --- ### **一、基本情况** 1. **个…...
