当前位置: 首页 > news >正文

谈谈 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_insensitivetrue,用户可以在不修改数据的情况下,实现对大小写不敏感的查询,从而简化查询逻辑并提高搜索的准确性。

测试代码

//在这个示例中,`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 新增内容的最后一篇&#xff0c;主要涉及算分方法和同义词加载的部分。 自定义算分&#xff1a;script_score 2.0 Elasticsearch 7.0 引入了新一代的函数分数功能&#xff0c;称为 script_score 查询。这一新功能提供了一种更简单、更灵活的方式来…...

【苍穹外卖】问题笔记

【DAY1 】 1.VCS找不到 好吧&#xff0c;发现没安git 接着发现安全模式有问题&#xff0c;点开代码信任此项目 2.导入初始文件&#xff0c;全员爆红 好像没maven&#xff0c;配一个 并在设置里设置好maven 3.启用注解&#xff0c;见新手苍穹 pom.xml改lombok版本为1.1…...

脑机接口SSVEP 信号特征提取技术术语

目录 背景简介 1. 最小能量组合&#xff08;MEC&#xff09;和最大对比组合&#xff08;MCC&#xff09; 2. 典型相关分析&#xff08;CCA&#xff09; 3. 滤波器组CCA&#xff08;FBCCA&#xff09; 4. 二进制子带CCA&#xff08;BsCCA&#xff09; 5. 融合CCA&#xff…...

【Veristand】Veristand 预编写教程目录

很久没有更新&#xff0c;最近打算出一期Veristand教程&#xff0c;暂时目录列成下面这个表格&#xff0c;如果各位有关心的遗漏的点&#xff0c;可以在评论区提问&#xff0c;我后期可以考虑添加进去&#xff0c;但是提前声明&#xff0c;太过小众的点我不会&#xff0c;欢迎各…...

C#光速入门的指南

以下是一份C#快速入门的指南&#xff0c;涵盖了基础语法、面向对象编程、输入输出、异常处理等方面&#xff0c;帮助你快速上手C#。 1. 开发环境搭建 要开始使用C#进行编程&#xff0c;你需要安装开发环境。最常用的是Visual Studio&#xff0c;它提供了丰富的工具和功能&…...

深入探索 STM32 微控制器:从基础到实践

一、引言 在当今的嵌入式系统领域&#xff0c;STM32 系列微控制器凭借其高性能、低功耗、丰富的外设以及广泛的应用场景&#xff0c;成为了众多开发者的首选。无论是在工业控制、智能家居、医疗设备&#xff0c;还是在消费电子等领域&#xff0c;STM32 都展现出了强大的生命力…...

Oracle性能调优(一):时间模型统计

Oracle性能调优(一):时间模型统计 时间模型统计视图时间模型统计指标时间模型统计视图 📖 DB Time的含义: DB Time表示前台会话在数据库调用中所花费的总时间,它是衡量数据库实例总负载的一个重要指标。DB Time是从实例启动时开始累计测量的,其计算方法是将所有前台会话…...

前端Npm面试题及参考答案

目录 npm 是什么?它的主要作用是什么? npm 包管理工具与 Yarn 有何不同? npm 的 package.json 文件有哪些重要字段? 什么是 npm 依赖?如何在项目中安装、更新和移除依赖? npm 的 node_modules 目录是什么?它的作用是什么? 什么是 npm 脚本?如何在 package.json 中…...

记一次线上Tomcat服务内存溢出的问题处理

背景&#xff1a;JavaWeb项目部署在Tomcat服务器上&#xff0c;服务器用的Windows。 问题表现&#xff1a;系统出现偶发性无法访问&#xff08;隔几天就会在早上无法访问&#xff09; Tomcat的日志catalina中&#xff0c;有如下报错信息。 java.lang.OutOfMemoryError: GC ov…...

nist关于rsa中p,q的要求

NIST.FIPS.186-4 美国国家标准与技术研究院&#xff08;National Institute of Standards and Technology&#xff0c;NIST&#xff09; FIPS,美国联邦信息处理标准&#xff08;Federal Information Processing Standard&#xff09; Criteria for IFC Key Pairs B.3.1 Crite…...

Vue3项目如何使用TailWind CSS保姆级教程

‌一、简单介绍一下TailWind CSS TailWind CSS是一个实用工具优先的 CSS 框架&#xff0c;它通过提供大量的原子化 CSS 类&#xff0c;允许开发者通过组合这些类来快速构建界面&#xff0c;而无需编写额外的 CSS 文件。这种设计理念使得开发过程更加直观和高效&#xff…...

NO.22十六届蓝桥杯备战|一维数组|七道练习|冒泡排序(C++)

B2093 查找特定的值 - 洛谷 题⽬要求下标是从0开始的&#xff0c;和数组的下标是吻合的&#xff0c;存放数据应该从下标0开始n的取值范围是1~10000数组中存放的值的绝对值不超10000&#xff0c;说明int类型就⾜够了找到了输出下标&#xff0c;找不到要输出-1&#xff0c;这⼀点…...

Mysql的索引失效

MySQL 的索引失效指的是&#xff1a;尽管在表上建立了索引&#xff0c;但在某些查询场景下&#xff0c;MySQL 优化器却没有利用这些索引&#xff0c;从而导致查询走了全表扫描&#xff0c;性能大大降低。下面详细说明几种常见的导致索引失效的情况及其原因&#xff1a; 1. 对索…...

现代前端框架渲染机制深度解析:虚拟DOM到编译时优化

引言&#xff1a;前端框架的性能进化论 TikTok Web将React 18迁移至Vue 3后&#xff0c;点击响应延迟降低42%&#xff0c;内存占用减少35%。Shopify采用Svelte重构核心交互模块&#xff0c;首帧渲染速度提升580%。Discord在Next.js 14中启用React Server Components后&#xf…...

set 和 map 的左右护卫 【刷题反思】

1. 相近的营业额 1.1 题目 题目描述&#xff1a;我们定义&#xff0c;一天营业额的最小波动 min { | 该天以前某一天的营业额 - 该天营业额 | } 特别的&#xff0c;第一天的营业额最小波动为第一天的营业额 输入描述&#xff1a;第一行 n &#xff08;n < 32767&#xf…...

【Linux高级IO】多路转接(poll epoll)

目录 1. poll 2. epoll 2.1 epoll_ctl 2.2 epoll_wait 2.3 epoll原理 2.4 epoll的工作模式 2.5 epoll的惊群效应 使用建议 总结 1. poll poll也是实现 I/O 多路复用的系统调用&#xff0c;可以解决select等待fd上限的问题&#xff0c;将输入输出参数分离&#xff0c;不需要…...

Linux上用C++和GCC开发程序实现两个不同PostgreSQL实例下单个数据库中多个Schema稳定高效的数据迁移到其它PostgreSQL实例

设计一个在Linux上运行的GCC C程序&#xff0c;同时连接三个不同的PostgreSQL实例&#xff0c;其中两个实例中分别有两个数据库中多个Schema的表结构分别与第三实例中两个数据库中多个Schema个结构完全相同&#xff0c;同时复制两个实例中两个数据库中多个Schema里的所有表的数…...

Linux下的网络通信编程

在不同主机之间&#xff0c;进行进程间的通信。 1解决主机之间硬件的互通 2.解决主机之间软件的互通. 3.IP地址&#xff1a;来区分不同的主机&#xff08;软件地址&#xff09; 4.MAC地址&#xff1a;硬件地址 5.端口号&#xff1a;区分同一主机上的不同应用进程 网络协议…...

Windows在多网络下指定上网接口

Windows在多网络下指定上网接口 一、说明 设备情况&#xff1a;win11&#xff0c;同时连接了有线网和WLAN&#xff0c;有线网连接着NAS必须保持连接。需求&#xff1a;有些情况时&#xff0c;有线网无网络而WLAN有网&#xff0c;但系统仍走着有线导致无法上网。 二、方法 过…...

网络安全员证书

软考网络安全员证书&#xff1a;信息安全领域的黄金标准 随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;网络安全员的需求也日益增加。软考网络安全员证书作为信息安全领域的黄金标准&#xff0c;对于网络安全从业者来说具有重要意义。本文将详细介绍…...

ParseDXF 功能说明文档

DXF解析成运动控制指令DEMO源代码&#xff0c;运动控制软件必备模块。 支持比例缩放 支持按图层解析&#xff0c;各图层可按加工速度、加工参数等分开控制&#xff0c;各图层可选择加工或不加工 支持点、直线、圆、圆弧、多段线解析。 暂不支持椭圆、样条曲线、文字、填充内容解…...

用Unity 2D碰撞体+Effector,5分钟实现《星露谷物语》式的磁铁吸附效果

用Unity 2D碰撞体Effector实现《星露谷物语》式磁铁吸附效果 在《星露谷物语》这类农场模拟游戏中&#xff0c;角色靠近可收集物品时自动吸附的设计极大提升了操作流畅度。这种看似简单的交互背后&#xff0c;其实隐藏着Unity物理系统的巧妙运用。本文将手把手教你如何用2D碰撞…...

AI时代的价值冲击——共识瓦解与转型阵痛

AI时代的价值冲击——共识瓦解与转型阵痛当我们将价值理解为“社会对效用增量的局部共识”时&#xff0c;人工智能对劳动力市场的冲击便呈现出全新的面貌。这场冲击的本质&#xff0c;并非简单的“机器替代人”&#xff0c;而是旧有的、基于工业时代劳动形态的价值共识体系正在…...

工程师快速解决TVA检测系统常见故障的实操技巧

TVA系统在汽车零部件焊接点检测中需长期连续运行&#xff0c;适配高节拍生产场景&#xff0c;作为负责系统运维的工程师&#xff0c;快速排查与解决常见故障&#xff0c;是保障系统稳定运行的核心职责。在实际运维过程中&#xff0c;不少工程师因对故障原因判断不准确、排查方法…...

5个高效技巧:Plus Jakarta Sans开源字体全方位应用指南

5个高效技巧&#xff1a;Plus Jakarta Sans开源字体全方位应用指南 【免费下载链接】PlusJakartaSans Jakarta Sans is a open-source fonts. Designed for Jakarta "City of collaboration" program in 2020. 项目地址: https://gitcode.com/gh_mirrors/pl/PlusJa…...

完美架构的设计哲学与实践方法论

“完美架构不是设计出来的&#xff0c;是演化出来的。核心是高内聚低耦合 开闭原则 依赖倒置。抓住三个关键点&#xff1a;边界清晰、变化隔离、可测试。沟通上用架构图 契约测试对齐认知&#xff0c;代码组织遵循六边形架构&#xff0c;调试建立可观测性体系。”一、完美架…...

从0到1的yapi接口文档部署记录

skills结合ai生成文档 顺便记录下使用一开始我想的是就用ai生成文档&#xff0c;还特意总结了skills方便后面使用&#xff0c;总结如下 --- name: Generate API Document For Controller description: 根据Controller生成详细的接口文档&#xff0c;包含请求方式、入参解释、…...

Spring 注解 @Qualifier 详细解析

1. 概述 今天带你了解一下 Spring 框架中的 Qualifier 注解&#xff0c;它解决了哪些问题&#xff0c;以及如何使用它。我们还将了解它与 Primary 注解的不同之处。 2. 痛点 使用 Autowired 注解是 Spring 依赖注入的绝好方法。但是有些场景下仅仅靠这个注解不足以让Spring知道…...

SAP项目顾问必看:CJ02/CJ20N用户状态报错全解析(附REL联动设置技巧)

SAP项目顾问进阶指南&#xff1a;CJ02/CJ20N用户状态报错深度解析与REL联动实战 在SAP项目实施过程中&#xff0c;WBS&#xff08;工作分解结构&#xff09;元素的状态管理一直是项目模块顾问的核心工作之一。特别是当项目进入执行阶段&#xff0c;CJ02/CJ20N事务码中频繁出现的…...

构建私有云音乐中枢【Navidrome+音流】(一)—— 云端部署与安全接入

1. 为什么你需要一个私有云音乐中枢 最近几年我越来越受不了各种音乐平台的限制——版权分散、会员涨价、推荐算法强推不喜欢的歌曲。去年我终于决定把收藏的3TB无损音乐搬到自己的云服务器上&#xff0c;用Navidrome搭建私有音乐库&#xff0c;再配合音流APP实现全平台播放。实…...