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

Elasticsearch(ES)中的脚本(Script)

文章目录

  • 一. 脚本是什么?
    • 1. `lang`(脚本语言)
    • 2. `source`(脚本代码)
    • 3. `params`(参数)
    • 4. `id`(存储脚本的标识符)
    • 5. `stored`(是否为存储脚本)
    • 6. `script` 的上下文(Context)
    • 7.完整示例
      • 内联脚本(Inline Script)
      • 存储脚本(Stored Script)
    • 8.字段总结表
  • 二. 脚本能做什么?
    • 1. 脚本查询(Script Query)
    • 2. 脚本聚合(Script Aggregation)
    • 3. 更新文档(Update By Script)
    • 4. 脚本排序(Script Sort)
    • 5. 脚本字段(Script Field)
    • 6. 索引时脚本(Ingest Pipeline)
    • 7. 脚本评分(Script Score Query)
    • 8. 数组操作(修改数组字段)
    • 关键点总结
  • 三. 为什么很多操作可以用脚本完成?
    • 1 灵活性
    • 2 避免冗余存储
    • 3 批量操作效率
    • 4 扩展性
  • 四. 脚本类型与执行方式
    • 1 脚本语言
    • 2 执行上下文
    • 3 脚本存储方式
  • 五. 安全与性能注意事项
    • 1 安全性
    • 2 性能优化
  • 六. 典型应用场景


一. 脚本是什么?

脚本是 ES 中一段可执行的代码片段,通常用于在查询或数据处理过程中动态计算值、修改文档、实现复杂逻辑。ES 支持多种脚本语言,但默认推荐使用 Painless(ES 专门为性能和安全性设计的脚本语言)。

在 Elasticsearch 中,脚本(Script)的组成通常包括以下几个核心字段,每个字段的作用和含义如下:


1. lang(脚本语言)

  • 含义:指定脚本使用的编程语言。

  • 默认值:painless(Elasticsearch 推荐的高性能脚本语言)。

  • 其他选项:expression(简单表达式)、groovy(旧版本支持,需谨慎启用)。

  • 示例:

    "script": {"lang": "painless","source": "..."
    }
    

2. source(脚本代码)

  • 含义:脚本的具体逻辑代码,用指定的 lang 语言编写。

  • 作用:定义动态计算逻辑,例如字段操作、条件判断、数学运算等。

  • 示例:

    "script": {"source": "doc['price'].value * params.discount"
    }
    

3. params(参数)

  • 含义:传递给脚本的外部参数,用于动态调整脚本行为。

  • 作用:避免硬编码,提高脚本复用性。

  • 示例:

    "script": {"source": "doc['price'].value * params.discount","params": { "discount": 0.8 }
    }
    

4. id(存储脚本的标识符)

  • 含义:引用预先存储在 Elasticsearch 中的脚本(通过 _scripts API 存储)。

  • 作用:避免重复编写相同脚本,提升性能(预编译)。

  • 示例:

    "script": {"id": "calculate_profit"
    }
    

5. stored(是否为存储脚本)

  • 含义:标识脚本是否已存储(通常与 id 配合使用)。

  • 示例:

    "script": {"stored": true,"id": "my_script"
    }
    

6. script 的上下文(Context)

虽然不是字段,但脚本的执行上下文决定了其行为,例如:

  • 查询上下文:在 querybool 查询中过滤或评分。
  • 聚合上下文:在 aggs 中生成计算字段。
  • 更新上下文:在 updateupdate_by_query 中修改文档字段。

7.完整示例

内联脚本(Inline Script)

{"query": {"script": {"script": {"lang": "painless","source": "doc['price'].value * params.discount > 100","params": { "discount": 0.8 }}}}
}
  • 字段解释:
    • lang: 使用 Painless 语言。
    • source: 计算 price 字段乘以折扣后是否大于 100。
    • params: 传递折扣参数 0.8

存储脚本(Stored Script)

  1. 存储脚本:

    POST _scripts/calculate_profit
    {"script": {"lang": "painless","source": "doc['revenue'].value - doc['cost'].value"}
    }
    
  2. 调用存储脚本:

    {"aggs": {"total_profit": {"sum": {"script": {"id": "calculate_profit"}}}}
    }
    

8.字段总结表

字段含义类型是否必需默认值
lang脚本语言Stringpainless
source脚本代码逻辑String是(或 id-
params传递给脚本的参数Object{}
id存储脚本的唯一标识符String-
stored是否引用存储脚本Booleanfalse

二. 脚本能做什么?

脚本几乎可以覆盖 ES 的所有核心操作,常见用途包括:

以下是一些 Elasticsearch 脚本的常见使用场景示例及其详细说明:


1. 脚本查询(Script Query)

场景:根据动态条件过滤文档(如价格乘以折扣后大于 100)。

{"query": {"bool": {"must": {"script": {"script": {"lang": "painless","source": "doc['price'].value * params.discount > params.threshold","params": {"discount": 0.8,"threshold": 100}}}}}}
}

说明:

  • 使用 params 传递折扣率和阈值,避免硬编码。
  • doc['price'] 直接访问字段的数值类型(比 _source 更高效)。

2. 脚本聚合(Script Aggregation)

场景:按利润(收入 - 成本)分组统计。

{"aggs": {"profit_groups": {"terms": {"script": {"lang": "painless","source": "doc['revenue'].value - doc['cost'].value"},"size": 10}}}
}

说明:

  • 通过脚本动态计算利润字段,无需预先存储该字段。
  • 使用 terms 聚合对利润分桶统计。

3. 更新文档(Update By Script)

场景:为符合条件的文档增加浏览量(views 字段 +1)。

POST /index/_update_by_query
{"script": {"source": "ctx._source.views += params.increment","params": { "increment": 1 }},"query": { "term": { "user": "alice" } }
}

说明:

  • ctx._source 访问文档的原始内容。
  • 通过 params.increment 参数化增量值,避免硬编码。

4. 脚本排序(Script Sort)

场景:根据动态权重(如点击量乘以系数)排序。

{"sort": {"_script": {"type": "number","script": {"source": "doc['clicks'].value * params.weight","params": { "weight": 1.5 }},"order": "desc"}}
}

说明:

  • 使用 _script 自定义排序逻辑。
  • type 指定排序值的类型(如 numberstring)。

5. 脚本字段(Script Field)

场景:在查询结果中添加一个动态计算的字段(如价格等级)。

{"query": { "match_all": {} },"script_fields": {"price_level": {"script": {"source": """if (doc['price'].value > 1000) {return 'high';} else {return 'low';}"""}}}
}

说明:

  • script_fields 在返回结果中添加一个临时字段 price_level
  • 使用条件判断(if-else)动态分类。

6. 索引时脚本(Ingest Pipeline)

场景:在数据写入时自动添加时间戳字段。

PUT _ingest/pipeline/add_timestamp
{"description": "Add timestamp at ingest time","processors": [{"script": {"source": "ctx.timestamp = new Date().getTime()"}}]
}

说明:

  • 通过 Ingest Pipeline 在索引时执行脚本。
  • ctx 表示当前文档的上下文,直接修改字段。

7. 脚本评分(Script Score Query)

场景:根据自定义逻辑影响文档相关性评分(如按点击量加分)。

{"query": {"script_score": {"query": { "match_all": {} },"script": {"source": "Math.log(1 + doc['clicks'].value) * params.boost","params": { "boost": 2 }}}}
}

说明:

  • script_score 结合数学函数(如对数)动态调整评分。
  • params.boost 控制权重参数。

8. 数组操作(修改数组字段)

场景:向文档的 tags 数组中添加新标签。

POST /index/_update/1
{"script": {"source": "ctx._source.tags.add(params.new_tag)","params": { "new_tag": "popular" }}
}

说明:

  • ctx._source.tags.add() 直接操作数组字段。
  • 使用 params 传递动态参数。

关键点总结

  1. 语法规范:

    • 使用 doc['field'] 访问数值型字段(高效)。
    • 使用 ctx._source 访问文档原始内容(灵活但较慢)。
  2. 参数化:

    • 通过 params 传递动态值,避免脚本注入风险。
  3. 存储脚本:

    • 频繁使用的脚本应存储(POST _scripts/<id>)以提升性能。
  4. 安全限制:

    • 默认启用 Painless 沙箱,禁止文件/网络操作。

三. 为什么很多操作可以用脚本完成?

1 灵活性

  • 动态逻辑:无需提前定义字段或索引结构,直接通过脚本实现复杂计算。
  • 条件处理:根据实时参数或文档内容动态调整行为(如 if-else 判断)。

2 避免冗余存储

  • 按需计算:无需预先存储所有可能的派生字段(如利润、折扣价),在查询时通过脚本实时计算。

3 批量操作效率

  • 原子性更新:通过脚本直接修改文档字段,避免先获取再更新的网络开销(如 update_by_query)。

4 扩展性

  • 自定义评分:在搜索时通过脚本影响文档的相关性得分(如结合地理位置、用户行为)。

四. 脚本类型与执行方式

1 脚本语言

  • Painless(默认,安全且高性能)
  • Expression(简单数学表达式)
  • 其他(如 Groovy、JavaScript,但需谨慎启用)

2 执行上下文

  • 查询时脚本:在 queryaggs 中实时计算。
  • 索引时脚本:在文档写入时通过 ingest pipeline 处理数据。
  • 更新时脚本:在 updateupdate_by_query 中修改文档。

3 脚本存储方式

  • 内联脚本:直接嵌入到请求中(简单但重复使用时效率低)。

  • 存储脚本:将脚本保存在 ES 中,通过 ID 调用(复用性强,提升性能):

    POST _scripts/calculate_profit
    {"script": {"lang": "painless","source": "doc['revenue'].value - doc['cost'].value"}
    }
    

五. 安全与性能注意事项

1 安全性

  • ES 默认启用脚本沙箱机制,限制敏感操作(如文件读写、网络访问)。

  • 可通过 elasticsearch.yml 配置禁用或限制脚本类型:

    script.allowed_types: inline
    script.allowed_contexts: search, update
    

2 性能优化

  • 避免复杂计算:脚本在查询时逐文档执行,复杂逻辑可能导致延迟。
  • 使用存储脚本:预编译存储的脚本减少解析开销。
  • 限制字段访问:通过 doc['field'](快速)而非 _source(慢)获取字段值。

六. 典型应用场景

  • 电商搜索:根据用户位置动态调整运费或显示本地化价格。
  • 日志分析:实时解析日志字段并生成统计信息。
  • 风控系统:根据用户行为实时计算风险评分。
  • 数据清洗:在索引前标准化或丰富数据(如拆分字段、添加时间戳)。

相关文章:

Elasticsearch(ES)中的脚本(Script)

文章目录 一. 脚本是什么&#xff1f;1. lang&#xff08;脚本语言&#xff09;2. source&#xff08;脚本代码&#xff09;3. params&#xff08;参数&#xff09;4. id&#xff08;存储脚本的标识符&#xff09;5. stored&#xff08;是否为存储脚本&#xff09;6. script 的…...

Collection集合,List集合,set集合,Map集合

文章目录 集合框架认识集合集合体系结构Collection的功能常用功能三种遍历方式三种遍历方式的区别 List集合List的特点、特有功能ArrayList底层原理LinkedList底层原理LinkedList的应用场list:电影信息管理模块案例 Set集合set集合使用哈希值红黑树HashSet底层原理HashSet集合元…...

Kafka 核心使用机制总结

Kafka 核心使用机制总结 Kafka 核心使用机制总结1. 分区 (Partitions) - 实现伸缩性与并行处理2. 副本 (Replicas) / 复制因子 (Replication Factor) - 实现高可用与容错3. 消费者组 (Consumer Groups) - 控制消息分发与消费进度4. 数据保留策略 (Retention Policies) - 管理存…...

【MCP】第二篇:IDE革命——用MCP构建下一代智能工具链

【MCP】第二篇&#xff1a;IDE革命——用MCP构建下一代智能工具链 一、引言二、IDE集成MCP2.1 VSCode2.1.1 安装VSCode2.1.2 安装Cline2.1.3 配置Cline2.1.4 环境准备2.1.5 安装MCP服务器2.1.5.1 自动安装2.1.5.2 手动安装 2.2 Trae CN2.2.1 安装Trae CN2.2.2 Cline使用2.2.3 内…...

WebSocket是h5定义的,双向通信,节省资源,更好的及时通信

浏览器和服务器之间的通信更便利&#xff0c;比http的轮询等效率提高很多&#xff0c; WebSocket并不是权限的协议&#xff0c;而是利用http协议来建立连接 websocket必须由浏览器发起请求&#xff0c;协议是一个标准的http请求&#xff0c;格式如下 GET ws://example.com:3…...

【PostgreSQL教程】PostgreSQL 特别篇之 语言接口连接Perl

博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...

springboot-基于Web企业短信息发送系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 当今社会已经步入了科学技术进步和经济社会快速发展的新时期&#xff0c;国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。本系统采用B/S架构&#xff0c;数据库是MySQL…...

Centos9安装docker

1. 卸载docker 查看是否安装了docker yum list | grep docker卸载老版本docker&#xff0c;拷贝自官网 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine卸载新版本…...

MySQL表的操作

MySQL表的操作 1. 创建表 在创建表前&#xff0c;需要先进入到某个数据库&#xff1a; use db_name创建表时&#xff0c;最好提前设计好表应该有的所有内容&#xff0c;否则后续添加或删除表的列可能会引发一连串的问题。 create table tb_name (field1 data_type [comment…...

Jmeter中同步定时器使用注意点

1.设置数量不可大于总线程数量&#xff0c;不然会一直等待 2.设置数量必须与总线程数量成整数倍数&#xff0c;不然还是要一直等。 3.当配置的数量小于线程数时&#xff0c;最好把循环打开&#xff0c;避免最后一次未准备好的线程数量达不到并发数。...

从零开始搭建Django博客③--前端界面实现

本文主要在Ubuntu环境上搭建&#xff0c;为便于研究理解&#xff0c;采用SSH连接在虚拟机里的ubuntu-24.04.2-desktop系统搭建&#xff0c;当涉及一些文件操作部分便于通过桌面化进行理解&#xff0c;通过Nginx代理绑定域名&#xff0c;对外发布。 此为从零开始搭建Django博客…...

使用Handsontable实现动态表格和下载表格

1.效果 2.实现代码 首先要加载Handsontable&#xff0c;在示例中我是cdn的方式引入的&#xff0c;vue的话需要下载插件 let hot null;var exportPlugin null;function showHandsontable(param) {const container document.getElementById("hot-container");// 如果…...

结合地理数据处理

CSV 文件不仅可以存储表格数据&#xff0c;还可以与地理空间数据结合&#xff0c;实现更强大的地理处理功能。例如&#xff0c;你可以将 CSV 文件中的坐标数据转换为点要素类&#xff0c;然后进行空间分析。 示例&#xff1a;将 CSV 文件中的坐标数据转换为点要素类 假设我们有…...

使用Geotools实现将Shp矢量文件加载SLD并合并图例生成-以湖南省周边城市为例

目录 前言 一、技术实现简介 1、生成成果说明 2、生成流程图说明 二、具体生成实践 1、渲染地图 2、生成图例 3、合并图像及输出 三、总结 前言 在当今数字化时代&#xff0c;地理信息系统&#xff08;GIS&#xff09;技术已成为城市管理、资源规划、环境监测等众多领域…...

openGauss数据库:起源、特性与对比分析

openGauss数据库&#xff1a;起源、特性与对比分析 一、起源与发展历程 1. 技术背景与开源历程 openGauss是由华为公司主导开发的开源关系型数据库管理系统&#xff0c;其技术根源可追溯至PostgreSQL。2019年&#xff0c;华为在内部整合了多个数据库产品线&#xff08;如GMDB…...

相机中各个坐标系的转换关系如像素坐标系到世界坐标系以及相机标定的目的

一、背景 无论是机器人领域、SLAM还是自动驾驶领域&#xff0c;都会涉及相机标定&#xff0c;但是看了很多博客&#xff0c;都是各种坐标系的变换&#xff0c;没有从上层说明进行坐标变换的目的是什么&#xff0c;以及相机标定完成后&#xff0c;是已知像素坐标求世界坐标&…...

ubuntu24设置拼音输入法,解决chrome不能输入中文

## 推荐方案&#xff1a;使用 Fcitx5 Fcitx5 是当前在 Wayland 环境下兼容性最好的输入法框架。 ### 1. 安装 Fcitx5 bash sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 fcitx5-frontend-qt5 fcitx5-module-c…...

linux内核进程管理(1)——创建,退出

linux源码阅读——进程管理&#xff08;1&#xff09; 1. 进程的基本介绍1.1 linux中进程和线程的区别1.2 task_struct中的基本内容1.3 命名空间ns(namespace)命名空间结构图Linux 中的命名空间类型 1.4 进程标识符 2. 创建一个进程的流程2.1 CLONE宏2.2 创建进程系统调用1. do…...

容器修仙传 我的灵根是Pod 第8章 护山大阵(DaemonSet)

第三卷&#xff1a;上古遗迹元婴篇 第8章 护山大阵&#xff08;DaemonSet&#xff09; 九霄之上&#xff0c;雷云如怒海翻腾。 天调度宗的护山大阵「九霄雷光阵」正发出悲鸣&#xff0c;七十二根镇山雷柱已有半数熄灭。每根雷柱底部&#xff0c;本该守护节点的「雷符傀儡」&a…...

使用Python将YOLO的XML标注文件转换为TXT文件格式

使用Python将YOLO的XML标注文件转换为TXT文件格式&#xff0c;并划分数据集 import xml.etree.ElementTree as ET import os from os import listdir, getcwd from os.path import join import random from shutil import copyfile from PIL import Image# 只要改下面的CLASSE…...

在面试中被问到spring是什么?

Spring框架的核心回答 1. 定义与定位 Spring是一个轻量级、开源的企业级应用开发框架&#xff0c;旨在简化Java应用的开发&#xff0c;提供全面的编程和配置模型。它的核心目标是解决企业应用开发的复杂性&#xff0c;通过模块化设计和松耦合架构&#xff0c;帮助开发者更高效…...

MongoDB Ubuntu 安装

MongoDB 安装 https://www.mongodb.com/zh-cn/docs/manual/installation/ https://www.mongodb.com/zh-cn/docs/manual/tutorial/install-mongodb-on-ubuntu/ https://www.mongodb.com/zh-cn/docs/manual/reference/ulimit/ https://www.mongodbmanager.com/download ubun…...

ElasticSearch深入解析(三):Elasticsearch 7的安装与配置、Kibana安装

文章目录 〇、简介1.Elasticsearch简介2.典型业务场景3.数据采集工具4.名词解释 一、安装1.使用docker(1)创建虚拟网络(2)Elasticsearch安装步骤 2.使用压缩包 二、配置1.目录介绍2.配置文件介绍3.elasticsearch.yml节点配置4.jvm.options堆配置问题&#xff1a;为什么说堆内存…...

初始SpringBoot

此文介绍一些有关我对SpringBoot的学习理解&#xff0c; 声明&#xff1a;此处我的IDEA是企业版的&#xff0c;可能和社区版会有一些差异 1. 第⼀个SpringBoot程序 1. SpringBoot介绍 我们看下Spring官方的介绍 可以看到,Spring让Java程序更加快速,简单和安全.Spring对于速…...

【算法笔记】动态规划基础(一):dp思想、基础线性dp

目录 前言动态规划的精髓什么叫“状态”动态规划的概念动态规划的三要素动态规划的框架无后效性dfs -> 记忆化搜索 -> dp暴力写法记忆化搜索写法记忆化搜索优化了什么&#xff1f;怎么转化成dp&#xff1f;dp写法 dp其实也是图论首先先说结论&#xff1a;状态DAG是怎样的…...

C++入门基础(2)

Hello~,欢迎大家来到我的博客进行学习&#xff01; 目录 1.缺省参数2.函数重载3.引用3.1 引用的概念和定义3.2 引用的特性3.3引用的使用3.4 const引用3.5 指针和引用的关系扩展 4. nullptr 1.缺省参数 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时&…...

OpenCV-Python (官方)中文教程(部分一)_Day15

18.图像梯度 梯度简单来说就是求导。 OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器&#xff1a;Sobel, Scharr和Laplacian。Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对 Sobel&#xff08;使用小的卷积核求解求解梯度角度时&#xff09;的优化。Laplacian 是…...

大厂面试:MySQL篇

前言 本章内容来自B站黑马程序员java大厂面试题和小林coding 博主学习笔记&#xff0c;如果有不对的地方&#xff0c;海涵。 如果这篇文章对你有帮助&#xff0c;可以点点关注&#xff0c;点点赞&#xff0c;谢谢你&#xff01; 1.MySQL优化 1.1 定位慢查询 定位 一个SQL…...

软件工程的13条“定律”:从Hyrum定律到康威定律,再到Zawinski定律

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Linux删除大文件df空间avail空间不增加

背景 根磁盘被同事写满&#xff0c;使用> 删除一些安装包后&#xff0c;df中的avail空间还是0 排除有进程正在占用文件&#xff0c;已使用lsof命令检测过我所删的文件是没有进程在使用 原因 是文件系统预留空间在作祟 解决 # 文件系统预留块 tune2fs -l /dev/vda2 | gr…...

【C语言-选择排序算法】实现对十个数进行排序

目录 前言 一、选择排序算法原理 二、选择排序算法实现对十个数进行排序 三、代码运行示例 四、选择排序算法的时间复杂度和空间复杂度分析 五、选择排序算法的优缺点 六、总结 前言 在计算机科学领域&#xff0c;排序算法是基石般的存在&#xff0c;它们就像是整理杂乱…...

驱动开发硬核特训 · Day 18:深入理解字符设备驱动与子系统的协作机制(以 i.MX8MP 为例)

日期&#xff1a;2025年04月23日 回顾&#xff1a;2025年04月22日&#xff08;Day 17&#xff1a;Linux 中的子系统概念与注册机制&#xff09; 本日主题&#xff1a;字符设备驱动 子系统协作机制剖析 学习目标&#xff1a;理解字符设备的注册原理&#xff0c;掌握其与子系统间…...

SQL Server 2022 常见问题解答:从安装到优化的全场景指南

SQL Server 2022 作为微软最新的数据库管理系统&#xff0c;在性能、安全性和云集成方面带来了多项革新。然而&#xff0c;用户在实际使用中仍可能遇到各类问题。本文将围绕安装配置、性能优化、备份恢复、安全设置、高可用性方案、兼容性问题及错误代码解析等核心场景&#xf…...

软件开发版本库命名规范说明

背景&#xff1a;近期一直再更新自己所开发的一个前端大文件上传npm库(enlarge-file-upload)&#xff0c;为了让库的发版更加规范&#xff0c;于是参考了各种文档写下了这篇关于软件开发库的版本命名规范&#xff0c;且不仅局限于前端的版本命名规范&#xff0c;适用于整个软件…...

Kafka 详解

1.基本概念&#xff1a;Kafka 是分布式发布 - 订阅消息系统&#xff0c;具有高吞吐量、可扩展性等优势&#xff0c;支持点对点和发布订阅两种消息模式&#xff0c;涉及 Broker、Topic、Partition 等多种角色。 2.安装步骤&#xff1a;需先安装 JDK 和 Zookeeper&#xff0c;下…...

【Qwen2.5-VL 踩坑记录】本地 + 海外账号和国内账号的 API 调用区别(阿里云百炼平台)

API 调用 阿里云百炼平台的海内外 API 的区别&#xff1a; 海外版&#xff1a;需要进行 API 基础 URL 设置国内版&#xff1a;无需设置。 本人的服务器在香港&#xff0c;采用海外版的 API 时&#xff0c;需要进行如下API端点配置 / API基础URL设置 / API客户端配置&#xf…...

硬核解析:整车行驶阻力系数插值计算与滑行阻力分解方法论

引言&#xff1a;阻力优化的核心价值 在汽车工程领域&#xff0c;行驶阻力是影响动力性、经济性及排放的核心因素。根据统计&#xff0c;车辆行驶中约60%的燃油消耗用于克服阻力&#xff08;风阻、滚阻、传动内阻等&#xff09;。尤其在电动化趋势下&#xff0c;阻力降低1%可提…...

【网络原理】TCP提升效率机制(一):滑动窗口

目录 一. 前言 二. 滑动窗口 三. 丢包现象 1&#xff09;ACK报文丢失 2&#xff09;数据丢失 四. 总结 一. 前言 TCP最核心的机制就是可靠传输 &#xff0c;确认应答&#xff0c;超时重传&#xff0c;连接管理这些都保证了可靠传输&#xff0c;得到了可靠传输&#xff0c…...

移动端使用keep-alive将页面缓存和滚动缓存具体实现方法 - 详解

1. 配置组件名称 确保列表页组件设置了name选项&#xff0c;&#xff08;组合式API额外配置&#xff09;&#xff1a; <!-- vue2写法 --> export default {name: UserList // 必须与 <keep-alive> 的 include 匹配 }<!-- vue3写法 --> defineOptions({na…...

工作记录9

1.点击按钮发送AJAX请求 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title&…...

Java 异常 SSLException: fatal alert: protocol_version 全解析与解决方案

在 Java 网络通信中&#xff0c;SSLException: fatal alert: protocol_version 是典型的 TLS/SSL 协议版本不兼容异常。本文结合 Java 官方规范、TLS 协议标准及实战经验&#xff0c;提供体系化解决方案&#xff0c;帮助开发者快速定位并解决协议版本冲突问题。 一、异常本质&…...

连锁美业管理系统「数据分析」的重要左右分析︳博弈美业系统疗愈系统分享

​美业管理系统中的数据分析功能在提升运营效率、优化客户体验、增强决策科学性等方面具有重要作用。 数据分析功能将美业从“经验驱动”升级为“数据驱动”&#xff0c;帮助商家在客户管理、成本控制、服务创新等环节实现精细化运营&#xff0c;最终提升盈利能力与品牌竞争力…...

Openharmony 和 HarmonyOS 区别?

文章目录 OpenHarmony 与 HarmonyOS 的区别&#xff1a;开源生态与商业发行版的定位差异一、定义与定位二、技术架构对比1. OpenHarmony2. HarmonyOS 三、应用场景差异四、开发主体与生态支持五、关键区别总结六、如何选择&#xff1f;未来展望 OpenHarmony 与 HarmonyOS 的区别…...

26.OpenCV形态学操作

OpenCV形态学操作 形态学操作&#xff08;Morphological Operations&#xff09;源自二值图像处理&#xff0c;主要用于分析和处理图像中的结构元素&#xff0c;对图像进行去噪、提取边缘、分割等预处理步骤。OpenCV库中提供了丰富的形态学函数&#xff0c;常见的包括&#xf…...

uniapp小程序使用echarts

1、引入插件 在Dcloud插件市场下载echarts插件&#xff1a;插件地址 2、页面使用简单示例&#xff1a; <template><view class"pie-view flex-center"><view style"width: 100%; height: 600rpx"><l-echart ref"chartRef&quo…...

Vue 中 使用 Mixins 解决 多页面共用相同组件的相关问题

1. 需要解决的问题 最近在vue项目中&#xff0c;有多个页面需要用到同一个组件&#xff0c;至于是什么组件&#xff0c;这里不重要&#xff0c;重要的这个组件需要被多个文件引用&#xff0c;而且有组件有一些控制逻辑。 1.1代码展示 <template><div class"ap…...

Rust 学习笔记:Rust 简介

Rust 学习笔记&#xff1a;Rust 简介 Rust 学习笔记&#xff1a;Rust 简介历史与发展历程核心特性优点缺点应用领域 Rust 学习笔记&#xff1a;Rust 简介 Rust 是一种系统级编程语言&#xff0c;由 Mozilla 研究院的 Graydon Hoare 于 2006 年设计&#xff0c;旨在提供内存安全…...

第六节:进阶特性高频题-自定义指令实现场景

示例&#xff1a;v-lazy&#xff08;图片懒加载&#xff09;、v-permission&#xff08;权限控制&#xff09; 钩子函数&#xff1a;mounted、updated、unmounted等 一、自定义指令核心机制 指令生命周期钩子 const myDirective {// 元素插入父节点时调用&#xff08;初始化…...

未曾设想的道路1

写在前面&#xff1a; 与其转去读博&#xff0c;倾向自学就业。 中国科学技术大学数学科学学院拥有一支优秀的师资团队&#xff0c;以下是部分教授的简介&#xff1a; 陈发来教授&#xff1a; 荣誉&#xff1a;2024年6月13日&#xff0c;在德国莱布尼茨信息科学中心召开的国际…...

Axure按钮设计分享:打造高效交互体验的六大按钮类型

在产品设计过程中&#xff0c;按钮作为用户与界面交互的核心元素&#xff0c;其设计质量直接影响用户体验与操作效率。Axure作为一款强大的原型设计工具&#xff0c;为设计师提供了丰富的按钮设计选项。本文将围绕基础按钮、禁用按钮、圆角按钮、动态按钮、渐变按钮和图标按钮六…...