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

ES使用笔记,聚合分组后再分页,探索性能优化问题

之前分享过一篇文档,也是关于聚合分组后再分页的具体实现,当时只想着怎么实现,没有去主要探索ES性能优化的问题,
这篇我会换一种方式,重新实现这个聚合分组后再分页的操作,并且指出能优化性能点,可能我们再使用的时候,并没有注意过的点,希望对你有帮助!大佬的话,请忽略!
上源码

public SearchResultVo searchSupplier(SearchPageVo searchPageVo) {// 创建搜索结果对象SearchResultVo searchResultVo = new SearchResultVo();// 获取基础的搜索请求对象SearchRequest searchRequest = CloudBaseQueryBuilder.getBaseSubOrderIndexRequest();// 创建搜索源构建器SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();// 创建机会页面对象并设置目录IDOpportunityPageVo vo = new OpportunityPageVo();vo.setCatalogIds(searchPageVo.getCatalogId());// 根据搜索类型设置供应商名称或单位名称if (PlatformConstant.COMMON_TYPE_YES.equals(searchPageVo.getType())) {vo.setSupplierName(searchPageVo.getName());} else {vo.setUnitName(searchPageVo.getName());}// 获取基础的条件查询BoolQueryBuilder boolQuery = CloudBaseQueryBuilder.getBaseOpportunityBoolQuery(vo);// 设置分组聚合int termsSize = (searchPageVo.getPageNo() - 1) * searchPageVo.getPageSize() + searchPageVo.getPageSize();TermsAggregationBuilder termsAggregationBuilder = AggregationBuilders.terms("aggregation").field(PlatformConstant.COMMON_TYPE_YES.equals(searchPageVo.getType()) ? "supplierName.keyword" : "unitName.keyword").size(termsSize).shardSize(termsSize * 2 + 10).subAggregation(AggregationBuilders.filters("orderTypeFilters",new FiltersAggregator.KeyedFilter("Agreement", QueryBuilders.termQuery("orderType", 3)),new FiltersAggregator.KeyedFilter("Estore", QueryBuilders.termQuery("orderType", 1))).subAggregation(AggregationBuilders.sum("totalPriceSum").field("totalPrice")) // 聚合总金额).subAggregation(AggregationBuilders.cardinality("orderCount").field("id.keyword"));// 设置总唯一值聚合CardinalityAggregationBuilder totel = AggregationBuilders.cardinality("totel").field(PlatformConstant.COMMON_TYPE_YES.equals(searchPageVo.getType()) ? "supplierName.keyword" : "unitName.keyword")// 精确度越高 内存消耗越大.precisionThreshold(40000);// 设置过滤器聚合FilterAggregationBuilder filter = AggregationBuilders.filter("bool_filter", boolQuery);List<Object> objectList = new ArrayList<>();objectList.add("orderCount");objectList.add(SortOrder.DESC);// 设置桶排序聚合termsAggregationBuilder.subAggregation(new BucketSortPipelineAggregationBuilder("bucket_sort",Arrays.asList(new FieldSortBuilder((String) objectList.get(0)).order((SortOrder) objectList.get(1)))).from((searchPageVo.getPageNo() - 1) * searchPageVo.getPageSize()).size(searchPageVo.getPageSize()));// 将分组聚合和总唯一值聚合添加到过滤器聚合中filter.subAggregation(termsAggregationBuilder);filter.subAggregation(totel);// 将过滤器聚合添加到搜索源构建器中sourceBuilder.aggregation(filter);// 设置搜索请求的源searchRequest.source(sourceBuilder);// 记录搜索请求日志log.info("searchRequest:" + sourceBuilder.toString());try {// 执行搜索请求并获取响应SearchResponse searchResponse = elasticsearchClient.search(searchRequest, RequestOptions.DEFAULT);// 获取过滤器聚合结果Filter boolFilter = searchResponse.getAggregations().get("bool_filter");// 获取总唯一值聚合结果Cardinality cardinality = boolFilter.getAggregations().get("totel");// 获取分组聚合结果Terms unitNameAggregation = boolFilter.getAggregations().get("aggregation");List<? extends Terms.Bucket> buckets = unitNameAggregation.getBuckets();List<SearchListVo> searchList = new ArrayList<>();// 遍历每个分组聚合桶for (Terms.Bucket bucket : buckets) {SearchListVo searchListVo = new SearchListVo();// 设置供应商名称或单位名称if (PlatformConstant.COMMON_TYPE_YES.equals(searchPageVo.getType())) {searchListVo.setSupplierName(bucket.getKeyAsString());} else {searchListVo.setUnitName(bucket.getKeyAsString());}// 获取订单类型过滤器聚合结果Filters filters = bucket.getAggregations().get("orderTypeFilters");// 设置电商订单金额searchListVo.setEstoreAmount(BigDecimal.valueOf(((Sum) filters.getBucketByKey("Estore").getAggregations().get("totalPriceSum")).getValue()));// 设置协议订单金额searchListVo.setAgreementAmount(BigDecimal.valueOf(((Sum) filters.getBucketByKey("Agreement").getAggregations().get("totalPriceSum")).getValue()));// 获取订单数量聚合结果Cardinality orderCount = bucket.getAggregations().get("orderCount");searchListVo.setSum((int) orderCount.getValue());searchList.add(searchListVo);}// 设置搜索结果的总数和列表searchResultVo.setTotal(Long.valueOf(cardinality.getValue()).intValue());searchResultVo.setList(searchList);} catch (IOException e) {// 记录搜索错误日志log.error("Error searching supplier", e);}return searchResultVo;
}

代码中的注释,方便我的代码逻辑,其中分页我还是用到了BucketSortPipelineAggregationBuilder这个类
BucketSortPipelineAggregationBuilder 是 Elasticsearch 中用于对聚合桶进行排序和分页的类。下面是对该类的作用、意义、使用场景、优点以及对性能的影响的详细解释:

  1. 作用和意义 排序:允许你对聚合结果中的桶进行排序。例如,可以按某个聚合值(如订单数量、总金额等)对供应商或单位进行排序。 分页:通过设置 from 和 size 参数,可以实现对聚合结果的分页,从而支持分页查询。 为什么使用这个类
  2. 复杂排序需求:当需要对聚合结果进行复杂的排序(例如,按多个字段排序)时,BucketSortPipelineAggregationBuilder
    提供了灵活的排序选项。 分页支持:在处理大量聚合结果时,分页是非常重要的,可以减少每次查询返回的数据量,提高查询效率和用户体验。
  3. 优点 灵活性:支持多种排序方式,包括按字段排序、按脚本排序等。 分页能力:内置分页功能,方便实现分页查询。 性能优化:通过减少每次查询返回的数据量,可以显著提高查询性能,尤其是在处理大量数据时。
    内存使用优化:通过分页和排序,可以减少内存占用,避免一次性加载大量数据导致的内存问题。
  4. 对性能的影响 减少数据传输:通过分页,每次查询只返回所需的数据量,减少了网络传输的数据量。 减少内存占用:避免一次性加载大量数据到内存中,减少了内存压力。
    提高查询速度:通过排序和分页,可以更快地定位和返回所需的数据,提高查询速度。

再构建聚合时,使用了TermsAggregationBuilder类,其中两个参数size和shardSize,这两个参数可以优化性能,如果不设置的话,ES默认size=10,shardSize也是10,在 Elasticsearch 的 terms 聚合中,size 和 shard_size 参数用于控制聚合结果的数量和分片级别的聚合结果数量
两个参数的区别:

  1. size: 作用: 控制最终返回的分组数量。 示例: size: 20 表示最终返回最多 20 个供应商分组。

  2. shard_size: 作用: 控制每个分片返回的分组数量。 示例: shard_size: 10 表示每个分片最多返回 10
    个供应商分组。

  3. size 和 shard_size 的关系
    shard_size:
    每个分片独立地对数据进行聚合,并返回最多 shard_size 个分组。
    例如,如果有 5 个分片,每个分片返回 10 个分组,那么协调节点将收到 50 个分组。
    size:
    协调节点从所有分片收集到的分组中,选择前 size 个分组。
    例如,如果 size: 20,协调节点将从 50 个分组中选择前 20 个分组。

  4. 性能优化:
    减少网络传输: 通过设置较小的 shard_size,可以减少每个分片返回的数据量,从而减少网络传输开销。
    提高效率: 协调节点只需处理较少的中间结果,从而提高整体查询效率。
    准确性:
    避免遗漏: 通过设置较大的 shard_size,可以确保每个分片返回足够的分组,从而避免在协调节点合并时遗漏重要的分组。
    精确排序: 确保最终返回的分组是全局排序后的结果,而不是每个分片排序后的结果。

  5. 示例
    假设有一个索引包含 100 个供应商,每个分片包含 20 个文档。配置如下:
    size: 20: 最终返回 20 个供应商分组。
    shard_size: 10: 每个分片返回 10 个供应商分组。
    分片聚合
    分片 1: 返回供应商 A, B, C, D, E, F, G, H, I, J。
    分片 2: 返回供应商 K, L, M, N, O, P, Q, R, S, T。
    分片 3: 返回供应商 U, V, W, X, Y, Z, A1, B1, C1, D1。
    分片 4: 返回供应商 E1, F1, G1, H1, I1, J1, K1, L1, M1, N1。
    分片 5: 返回供应商 O1, P1, Q1, R1, S1, T1, U1, V1, W1, X1。
    协调节点聚合
    合并分组: 协调节点将所有分组合并,得到 50 个供应商分组。
    排序: 协调节点按文档数量降序排序,如果数量相同则按供应商名称升序排序。
    选择前 20 个分组: 最终返回前 20 个供应商分组。

  6. 冲突问题
    冲突: 由于 shard_size 控制每个分片返回的分组数量,如果 shard_size 设置得太小,可能会导致某些重要的分组被遗漏,从而影响最终结果的准确性。
    避免冲突: 通过合理设置 shard_size,确保每个分片返回足够的分组,从而避免在协调节点合并时遗漏重要的分组。

  7. 总结
    shard_size 和 size 的关系是:shard_size 控制每个分片返回的分组数量,size 控制最终返回的分组数量。
    性能优化: 通过设置较小的 shard_size,可以减少网络传输开销,提高查询效率。
    准确性: 通过设置较大的 shard_size,可以确保每个分片返回足够的分组,从而避免遗漏重要的分组,确保最终结果的准确性。所以shard_size的大小要我们的数据量,业务需求去调整,没有绝对的正确,只有相对的平衡
    还有个计算分组的总条数,我使用的是计算唯一的类:CardinalityAggregationBuilder,其中precisionThreshold就是调整的阙值,这个参数决定了Elasticsearch在计算基数时使用的内存大小和精度之间的权衡。较高的阈值会提高精度但增加内存消耗,

那么在ES中还有哪些聚合方式:

在Elasticsearch中,除了 TermsAggregationBuilder,还有其他几种常用的聚合类。以下是几种常见的聚合类及其特点、优缺点和对性能的影响:

  1. Terms Aggregation

    作用:用于按字段值进行分组统计。
    优点:
    灵活性高,支持多种子聚合。
    支持排序、过滤等操作。
    缺点:
    对于大基数(大量唯一值)字段,性能较差,内存消耗较大。
    需要设置合理的 shardSize 和 precisionThreshold 来平衡精度和性能。
    性能影响:随着唯一值数量增加,性能会显著下降。

  2. Histogram Aggregation

    作用:用于数值字段的区间分组统计。
    优点:
    适合数值型数据的区间分析。
    计算简单,性能较好。
    缺点:
    不适用于非数值字段。
    区间划分需要预先设定。
    性能影响:性能较好,但依赖于区间的合理设置。

  3. Date Histogram Aggregation
    作用:用于日期字段的时间区间分组统计。
    优点:
    专门针对日期字段优化。
    支持灵活的时间间隔(如天、月、年)。
    缺点:
    仅适用于日期字段。
    性能影响:性能较好,特别是对于时间序列数据。

  4. Range Aggregation
    作用:用于数值或日期字段的范围分组统计。
    优点:
    支持自定义范围。
    适合分析特定范围内的数据分布。
    缺点:
    需要手动定义范围边界。
    性能影响:性能较好,取决于范围的数量和复杂度。

  5. Composite Aggregation
    作用:用于多字段组合分组统计,支持深度分页。
    优点:
    支持多字段组合分组。
    支持深度分页,避免一次性加载大量数据。
    缺点:
    复杂度较高,配置较为繁琐。
    性能影响:性能较好,特别适合大数据集的分页查询。

  6. Significant Terms Aggregation
    作用:用于发现显著不同的项,常用于异常检测。
    优点:
    适合发现异常或显著变化的数据。
    自动计算显著性。
    缺点:
    计算复杂,性能较低。
    性能影响:性能较差,适合小规模数据集或特定场景。

  7. Cardinality Aggregation
    作用:用于计算唯一值的数量。
    优点:
    简单易用,适合唯一值统计。
    缺点:
    对于大基数字段,性能较差,内存消耗大。
    性能影响:性能取决于 precisionThreshold 的设置。

  8. 聚合类的选择建议
    如果需要按离散值分组:使用 Terms Aggregation 或 Composite Aggregation。Composite Aggregation 更适合大数据集的分页查询。
    如果需要按数值或日期区间分组:使用 Histogram Aggregation 或 Date Histogram Aggregation。
    如果需要按范围分组:使用 Range Aggregation。
    如果需要发现显著变化的数据:使用 Significant Terms Aggregation。
    如果需要计算唯一值数量:使用 Cardinality Aggregation,并根据实际需求调整 precisionThreshold。

相关文章:

ES使用笔记,聚合分组后再分页,探索性能优化问题

之前分享过一篇文档,也是关于聚合分组后再分页的具体实现,当时只想着怎么实现,没有去主要探索ES性能优化的问题, 这篇我会换一种方式,重新实现这个聚合分组后再分页的操作,并且指出能优化性能点,可能我们再使用的时候,并没有注意过的点,希望对你有帮助!大佬的话,请忽略! 上源码…...

VUE3 vite下的axios跨域

在使用 Vite 开发时&#xff0c;如果你的前端项目需要请求后端 API&#xff0c;且后端和前端不在同一个域上&#xff0c;可能会遇到跨域问题。跨域是指浏览器出于安全考虑&#xff0c;阻止了前端网页向不同源&#xff08;域名、协议、端口&#xff09;发送请求。 解决跨域问题…...

Mac下安装ADB环境的三种方式

参考网址&#xff1a; Mac下安装ADB环境的三种方式-百度开发者中心 ADB&#xff0c;即Android Debug Bridge&#xff0c;是Android开发过程中不可或缺的工具。通过ADB&#xff0c;开发者可以在计算机上管理设备或模拟器上的应用&#xff0c;提供了丰富的调试功能。然而&#…...

在Vue中,<img> 标签的 src 值

1. 直接指定 src 的值&#xff08;适用于网络图片&#xff09; 如果你使用的是网络图片&#xff08;即图片的URL是完整的HTTP或HTTPS链接&#xff09;&#xff0c;可以直接指定 src 的值&#xff1a; vue 复制 <template><div><img src"https://exampl…...

Kotlin基础知识学习(三)

函数使用 基本用法 函数声明变化 如果函数是公开的&#xff0c;则public关键字可以省略。用fun关键字表示函数的定义。如果函数没有返回值可以不用声明。如果函数表示重载&#xff0c;直接在fun同一行用override修饰。函数参数格式是变量名&#xff1a;变量类型。函数参数允…...

渗透测试之XEE[外部实体注入]漏洞 原理 攻击手法 xml语言结构 防御手法

目录 原理 XML语言解释 什么是xml语言&#xff1a; 以PHP举例xml外部实体注入 XML语言结构 面试题目 如何寻找xxe漏洞 XEE漏洞修复域防御 提高版本 代码修复 php java python 手动黑名单过滤(不推荐) 一篇文章带你深入理解漏洞之 XXE 漏洞 - 先知社区 原理 XXE&…...

店铺营业状态设置(day05)

Redis入门 Redis简介 Redis 是一个基于内存的 key-value 结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。 Redis是一个基于内存的 key-value 结构数据库。 主要特点&#xff1a; 1、基于内存存储&#xff0c;读写性能高 2、适合存储热点数据&#xff08;热点…...

游戏引擎学习第84天

仓库:https://gitee.com/mrxiao_com/2d_game_2 我们正在试图弄清楚如何完成我们的世界构建 上周做了一些偏离计划的工作&#xff0c;开发了一个小型的背景位图合成工具&#xff0c;这个工具做得还不错&#xff0c;虽然是临时拼凑的&#xff0c;但验证了背景构建的思路。这个过…...

快手SDK接入错误处理经验总结(WebGL方案)

1、打包时提示Assets\WebGLTemplates\ks路径下未找到Index.html文件错误 处理方法&#xff1a;直接使用Unity默认模板下的Index.html文件即可 文件所在路径&#xff1a;Unity安装路径\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\WebGLTemplates\Default 参考图&a…...

C语言 for 循环:解谜数学,玩转生活!

放在最前面的 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…...

Node.js 与 JavaScript 是什么关系

JavaScript 是一种编程语言&#xff0c;而 Node.js 是 JavaScript 的一个运行环境&#xff0c;它们在不同的环境中使用&#xff0c;具有一些共同的语言基础&#xff0c;但也有各自独特的 API 和模块&#xff0c;共同推动着 JavaScript 在前后端开发中的广泛应用。 一、基础语言…...

Java 大视界 -- Java 大数据性能监控与调优:全链路性能分析与优化(十五)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

深入Spring Boot:自定义Starter开发与实践

引言 Spring Boot通过其强大的自动配置机制和丰富的Starter模块&#xff0c;极大地简化了Spring应用的开发过程。Starter模块封装了一组相关的依赖和配置&#xff0c;使得开发者可以通过简单的依赖引入&#xff0c;快速启用特定的功能。然而&#xff0c;除了使用Spring Boot提…...

React 中hooks之useTransition使用总结

目录 概述基本用法使用场景最佳实践注意事项 概述 什么是 useTransition? useTransition 是 React 18 引入的新 Hook&#xff0c;用于标记非紧急的状态更新。它允许组件在状态转换期间保持响应&#xff0c;通过将某些更新标记为"过渡"来推迟它们的渲染。 主要特…...

怎样使用树莓派自己搭建一套ADS-B信号接收系统

0 我们知道&#xff0c;ADS-B全称广播式自动相关监视系统&#xff0c;其实就是飞机发出的广播信号&#xff0c;用明码来对外发送自己的位置、高度、速度、航向等信息&#xff0c;是公开信息。连续接收到一架飞机发出的ADS-B信息后&#xff0c;可以通过其坐标点来描绘出飞机的航…...

Chrome谷歌浏览器如何能恢复到之前的旧版本

升级了谷歌最新版不习惯&#xff0c;如何降级版本 未完待续。。 电脑中的Chrome谷歌浏览器升级到了最新版本&#xff0c;但是有种种的不适应&#xff0c;如何能恢复到之前的旧版本呢&#xff1f;我们来看看操作步骤&#xff0c;而且无需卸载重装。 怎么恢复Chrome 之前版本&a…...

路由器旁挂三层网络实现SDWAN互联(爱快SD-WAN)

近期因公司新办公区建设&#xff0c;原有的爱快路由器的SDWAN功能实现分支之间互联的服务还需要继续使用。在原有的小型网络中&#xff0c;使用的爱快路由器当作网关设备&#xff0c;所以使用较为简单,如下图所示。 现变更网络拓扑为三层网络架构&#xff0c;但原有的SDWAN分支…...

代码随想录算法训练营第五十五天 |108.冗余连接 109.冗余连接Ⅱ

108.冗余连接&#xff1a; 文章链接 题目链接&#xff1a;108.冗余连接 思路 首先分析题目&#xff0c;给定拥有n个节点和n条边的图&#xff0c;其中图是在原n个节点和n - 1条无环无向图中添加一条边得到的。要求是输出多出的边。&#xff08;PS&#xff1a;可能会有多个答案…...

Unity补充 -- 协程相关

1.协程。 协程并不是线程。线程是主线程之外的另一条 代码按照逻辑执行通道。协程则是在代码在按照逻辑执行的同时&#xff0c;是否需要执行额外的语句块。 2.协程的作用。 在update执行的时候&#xff0c;是按照帧来进行刷新的&#xff0c;也是按照帧执行代码的。但是又不想…...

【第二十周】U-Net:用于生物图像分割的卷积神经网络

文章目录 摘要Abstract文章信息研究动机U-Net网络结构U-Net网络搭建数据增强损失函数转置卷积创新性与不足创新性&#xff1a;不足&#xff1a; 总结 摘要 U-Net&#xff08;Convolutional Networks for Biomedical Image Segmentation&#xff09;是一种用于图像分割的深度学…...

无机布防火卷帘门报价透明,包工包料,一次说清所有费用

很多客户在选购无机布防火卷帘门时&#xff0c;最关心实际成交价格&#xff0c;也担心报价不清晰&#xff0c;后期产生各类额外支出。行业内产品定价参差不齐&#xff0c;选材做工不同&#xff0c;最终价位自然存在差距&#xff0c;挑选时不能只看表面低价。 &#x1f449; 点击…...

Visual Paradigm 17.0 团队协作新功能实测:手把手教你用项目模板和文件夹管理提效

Visual Paradigm 17.0 团队协作实战指南&#xff1a;从模板配置到文件夹管理的高效工作流在敏捷开发团队中&#xff0c;项目启动速度和资产管理的规范性往往直接影响整体效率。Visual Paradigm 17.0针对这一痛点推出的团队协作增强功能&#xff0c;特别是服务器端项目模板和文件…...

新手村任务:成为一个架构师需要哪些装备?

新手村任务:成为一个架构师需要哪些装备? 一、前言 如果你刚入行不久,想成为一名架构师,那这篇文章就是为你写的。 我们把成为架构师比作一个RPG游戏,你是主角,需要收集各种装备、刷经验、升级技能。 新手村的第一个任务就是:了解你需要哪些装备。 二、架构师技能树…...

【DeepSeek开源协议识别权威指南】:20年合规专家亲授3大协议陷阱与5步精准识别法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek开源协议识别的底层逻辑与合规价值 DeepSeek系列模型&#xff08;如DeepSeek-V2、DeepSeek-Coder&#xff09;虽以“开源”名义发布&#xff0c;但其实际许可状态需通过结构化协议解析才能准确…...

3分钟掌握JetBrains IDE试用期重置:终极完整指南

3分钟掌握JetBrains IDE试用期重置&#xff1a;终极完整指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter JetBrains IDE试用期重置工具&#xff08;ide-eval-resetter&#xff09;是一个开源项目&#xff0c;专…...

工业云脑:06 现在就能干:树莓派边缘盒子+PLC,10分钟缺陷检测小案例

06 现在就能干:树莓派边缘盒子+PLC,10分钟缺陷检测小案例 今天第九篇06小节——现在就能干:树莓派边缘盒子+PLC,10分钟缺陷检测小案例。新手照着做10分钟就能跑起来,老手一看就知道这玩意儿省了多少钱。以前想上AI检测,得花几万块买专业边缘盒子;现在?树莓派5(RPi 5)…...

从NLP到RAG:AI标书生成系统的技术架构与落地路径深度剖析

引言2026年2月&#xff0c;国家发改委等八部门联合印发《关于加快招标投标领域人工智能推广应用的实施意见》&#xff0c;明确到2026年底招标文件检测、智能辅助评标、围串标识别等重点场景在部分省市实现全覆盖。同一时期&#xff0c;《招标投标法》修订草案经国务院常务会议原…...

别再盲调temperature=0.2!DeepSeek补全效果突变的4个隐藏参数,资深架构师压箱底调参清单

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;别再盲调temperature0.2&#xff01;DeepSeek补全效果突变的4个隐藏参数&#xff0c;资深架构师压箱底调参清单 DeepSeek-R1/VL 等开源大模型在实际部署中&#xff0c;仅靠调节 temperature 往往收效甚…...

收藏|2026年大模型算法岗崛起!程序员小白入门高薪赛道全攻略

前些年&#xff0c;算法岗位一直稳居技术圈高薪行列&#xff0c;无数程序员争相入局&#xff0c;也成为计算机专业毕业生求职首选方向。 伴随大模型技术飞速迭代落地&#xff0c;行业就业格局迎来重大变革。如今含金量最高、人才缺口最大、长期发展潜力顶尖的岗位&#xff0c;已…...

避坑指南:Unity动态加载模型时,TriLib插件材质丢失、缩放异常的5个常见问题解决

Unity动态加载模型避坑指南&#xff1a;TriLib插件材质丢失与缩放异常的深度解决方案当你在Unity项目中尝试使用TriLib插件动态加载外部模型时&#xff0c;是否遇到过这些令人抓狂的情况&#xff1a;模型加载后材质全部变成刺眼的粉红色&#xff0c;贴图神秘消失&#xff0c;或…...