Elasticsearch使用function_score查询酒店和排序

需求

基于用户地理位置,对酒店做简单的排序,非个性化的推荐。酒店评分包含以下:

  1. 酒店类型(依赖用户历史订单数据):希望匹配出更加符合用户使用的酒店类型
  2. 酒店评分:评分高的酒店用户体验感好
  3. geo地理位置评分:例如出差的用户,距离较近的较为便捷
  4. 价格评分(依赖用户历史订单数据):符合用户的消费习惯

实现

基于Elasticsearch 7.4,centos7环境。

索引Mapping

{"properties": {"address": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"addressEn": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"boardRoom": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"brandCode": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"businessZone": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"cityCode": {"type": "keyword"},"cityId": {"type": "long"},"cityName": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"commentFacilityPoint": {"type": "float"},"commentHygienePoint": {"type": "float"},"commentPoint": {"type": "float"},"commentPositionPoint": {"type": "float"},"commentRecommendPercent": {"type": "float"},"commentServicePoint": {"type": "float"},"diningRoom": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"email": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"factories": {"properties": {"facilityName": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"facilityType": {"type": "long"},"facilityValue": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}},"fixTime": {"type": "date","format": "yyyy-MM-dd"},"gdLocation": {"type": "geo_point"},"govStar": {"type": "long"},"govZone": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"gymnasium": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"hotelCode": {"type": "keyword"},"hotelDesc": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"hotelFacility": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"hotelGroup": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"hotelName": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"hotelNameEn": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"hotelService": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"hotelShortDesc": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"hotelStatus": {"type": "long"},"hotelTips": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"location": {"type": "geo_point"},"mainPicture": {"type": "keyword"},"minPrice": {"type": "float"},"openingTime": {"type": "date","format": "yyyy-MM-dd"},"parking": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"phoneNum": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"pickUpService": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"pictures": {"properties": {"pictureType": {"type": "long"},"pictureUrl": {"type": "keyword"}}},"postNumber": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"roomCount": {"type": "long"},"rooms": {"properties": {"bedNumber": {"type": "long"},"bedWidth": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"checkNumber": {"type": "long"},"facilities": {"properties": {"facilityValue": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"roomCode": {"type": "keyword"}}},"pictures": {"properties": {"pictureUrl": {"type": "keyword"},"roomCode": {"type": "keyword"}}},"roomArea": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"roomBedType": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"roomCigaretteInfo": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"roomCode": {"type": "keyword"},"roomCount": {"type": "long"},"roomFloor": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"roomMainPicture": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"roomName": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"windowType": {"type": "long"},"wrapRoomName": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}},"starCode": {"type": "long"},"starName": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"swimmingPool": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"trafficInfo": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"type": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"wifi": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}
}

字段的描述:

{"hotelCode": "酒店编号","hotelName": "酒店中文名","hotelNameEn": "酒店英文名","hotelStatus": "酒店状态:1启用,2挂起","cityId": "系统城市ID","cityCode": "城市编号","cityName": "城市名称","openingTime": "开业时间","fixTime": "装修时间","starCode": "星级编号(1,2,3,4,5)","starName": "星级描述","govStar": "是否挂牌星级:1:是;0:否","phoneNum": "电话","email": "邮件","postNumber": "邮编","location": "百度坐标","gdLocation": "高德坐标","address": "地址","addressEn": "地址","brandCode": "酒店品牌,例如“麗枫”。","hotelGroup": "酒店所属集团名称。例如“7天(铂涛)”。","roomCount": "房间数量","mainPicture": "图片地址","hotelTips": "酒店温馨提示信息","hotelFacility": "酒店设施","hotelService": "酒店服务","hotelShortDesc": "酒店简介","hotelDesc": "酒店详细介绍","trafficInfo": "交通信息","wifi": "是否有免费WIFI,字段不为空表示有该项服务","boardRoom": "是否有会议室,字段不为空表示有该项服务","diningRoom": "是否有餐厅,字段不为空表示有该项服务","parking": "是否有停车场,字段不为空表示有该项服务","pickUpService": "是否有接机服务,字段不为空表示有该项服务","swimmingPool": "是否有游泳池,字段不为空表示有该项服务","gymnasium": "是否有健身房,字段不为空表示有该项服务","govZone": "行政区域信息,信息来自于“按城市查询县级行政区域”接口","businessZone": "商圈信息","minPrice": "最低价","commentPoint": "酒店点评分数(满分5分)","commentRecommendPercent": "酒店有百分之多少用户推荐,例如90%时数据是90.0","commentPositionPoint": "对于酒店位置的单项点评分数(满分5分)","commentFacilityPoint": "对于酒店设施的单项点评分数(满分5分)","commentServicePoint": "对于酒店服务的单项点评分数(满分5分)","commentHygienePoint": "对于酒店卫生的单项点评分数(满分5分)"
}

查询酒店和排序

数据量较大,上传不了,有需要可私信获取demo酒店数据。

排序方式有推荐、距离、好评、低价、高价,这里我们实现推荐排序。

筛选条件也是多样的,如下所示,这里我们使用距离筛选:

  1. 评分:4.8以上、4.5以上、4.0以上、3.5以上
  2. 酒店类型:民宿、 酒店公寓、青年公寓、特色住宿、别墅、客栈、农家院、电竞酒店、情侣酒店
  3. 宾客类型:外宾适用、港澳台宾客适用
  4. 特色主题“地铁附近、亲子精选、商务出行、度假休闲、湖畔美居、动人夜景、依山傍水、地标景、四合院
  5. 酒店设施:免费停车、洗衣服、24小时热水、空调、停车场、棋牌室、健身房、接送机服务、洗衣服服务
  6. 房型:大床房、双床房、床位房、单人床房、电竞房、情侣房、影音房、私汤房、亲子房
  7. 餐食:含早
  8. 距离:1km以内、1-3km、3-5km、5-10km

基于地理位置(也可以增加其他条件)5km范围内的酒店数据使用function_scope排序。

在价格和位置上,我们期望和origin数据接近的酒店数据,使用了衰减函数进行评分,衰减函数详细说明在后面进行说明。

注意的是boost_mode使用了replace使用function_score计算的分数,避免elasticsearch的文档评分干扰。

{"query": {"function_score": {"query": {"bool": {"must": {"match_all": {}},// 根据距离筛选数据"filter": {"geo_distance": {"distance": "5km","gdLocation": {"lat": "23.150261","lon": "113.324994"}}}}},"boost": 5,// max_boost 参数来限制新分数不超过一定的限制。 "max_boost": 100,"functions": [// 酒店类型(依赖用户历史数据){"filter": {"match": {"hotelName": "青年旅舍"}},// 生成从 0 到但不包括 1 均匀分布的分数(非必填),默认情况下,它使用内部 Lucene 文档 ID 作为随机源"random_score": {// 使用_seq_no字段作为随机源,唯一的缺点是如果文档已更新,则分数将会更改"field": "_seq_no","seed": 10},"weight": 5},// 酒店评价{"filter": {"range": {// 酒店服务的单项点评分数"commentPoint": {"gte": 3.5,"lte": 5}}},"weight": 10},// 衰减函数(DECAY_FUNCTION )-geo 地理位置评分{// gauss 正常衰减"gauss": {// 在origin上偏移offset后随着scale进行衰减"gdLocation": {// 用于计算距离的原点 lon,lat(经纬度)"origin": "113.324994,23.150261",// 定义计算得分等于衰减参数时距原点 + 偏移量的距离"scale": "5km",// 如果定义了offset,则衰减函数将仅计算距离大于offset的文档的衰减函数。默认值为 0。"offset": "1km",//衰减参数定义如何在给定scale的距离上对文档进行评分。如果未定义衰减,则距离scale上的文档将评分为 0.5。"decay": "0.33"}},"weight": 15},//价格排序(依赖历史数据,缺省 150){"gauss": {// 在150元基础上偏移30元在100元范围内衰减"minPrice": {"origin": 150,"offset": 30,"scale": 100}},"weight": 10}],// functions函数的分数与查询的分数相结合// multiply:查询得分与functions得分相乘(默认)、replace:仅使用functions得分,忽略查询得分、sum:查询得分与functions得分相加、avg:平均、max:查询得分和functions得分的最大值、min:查询得分和functions得分的最小值"boost_mode": "replace",// Score_mode 指定如何组合计算functions函数的分数// multiply(默认)分数相乘、sum分数相加、avg:分数被平均、max:使用最高分数、min:使用最低分数"score_mode": "sum",// 默认情况下,修改分数不会更改匹配的文档。要排除不满足特定分数阈值的文档,可以将 min_score 参数设置为所需的分数阈值。"min_score": 0}},// 返回距离"script_fields": {"distance_in_m": {"script": "doc['gdLocation'].arcDistance(23.150261,113.324994)"}}
}

查询结果:

{"took": 10,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3244,"relation": "eq"},"max_score": 24.119629,"hits": [{"_index": "hotel_test","_type": "_doc","_id": "jiMk1I0BqMZKQzdg8UCl","_score": 24.119629,"_source": {"gdLocation": {"lon": "113.288340","lat": "23.132313"},"address": "青龙坊2号","cityName": "广州市","commentPoint": 4.5,"minPrice": 158.0,"hotelName": "亨富涞酒店(广州青龙坊店)"},"fields": {"distance_in_m": [4246.059620137545]}},{"_index": "hotel_test","_type": "_doc","_id": "YSIa1I0BqMZKQzdgDqVC","_score": 23.682613,"_source": {"gdLocation": {"lon": "113.357566","lat": "23.134140"},"address": "中山大道西138号广运楼3层","cityName": "广州市","commentPoint": 4.1,"minPrice": 193.0,"hotelName": "棠舍公寓(广州天河公园华景新城店)"},"fields": {"distance_in_m": [3782.1797227009683]}},{"_index": "hotel_test","_type": "_doc","_id": "JyIY1I0BqMZKQzdgnpWo","_score": 23.155634,"_source": {"gdLocation": {"lon": "113.346694","lat": "23.173795"},"address": "天源路134-140号201铺","cityName": "广州市","commentPoint": 4.2,"minPrice": 150.0,"hotelName": "广州友逸·青舍酒店(天河客运站地铁站店)"},"fields": {"distance_in_m": [3430.6572488915003]}},{"_index": "hotel_test","_type": "_doc","_id": "cCIY1I0BqMZKQzdg3pj1","_score": 22.291739,"_source": {"gdLocation": {"lon": "113.342061","lat": "23.172472"},"address": "元岗街元岗南路13-15号之6","cityName": "广州市","commentPoint": 3.8,"minPrice": 128.0,"hotelName": "华舍连锁酒店(广州天河客运站店)"},"fields": {"distance_in_m": [3023.907431757608]}},{"_index": "hotel_test","_type": "_doc","_id": "xCIc1I0BqMZKQzdgr8yX","_score": 22.093195,"_source": {"gdLocation": {"lon": "113.347124","lat": "23.143523"},"address": "天河北路719-721号东方之珠花园","cityName": "广州市","commentPoint": 4.9,"minPrice": 76.0,"hotelName": "小李家青旅(广州华师店)"},"fields": {"distance_in_m": [2383.4711465212176]}},{"_index": "hotel_test","_type": "_doc","_id": "pyMi1I0BqMZKQzdgMxy2","_score": 22.071991,"_source": {"gdLocation": {"lon": "113.329772","lat": "23.134002"},"address": "天河路365号天俊阁1802","cityName": "广州市","commentPoint": 4.1,"minPrice": 70.0,"hotelName": "迎寓制式青旅(石牌桥地铁站店)"},"fields": {"distance_in_m": [1872.7678276747463]}},{"_index": "hotel_test","_type": "_doc","_id": "1SIY1I0BqMZKQzdgu5b6","_score": 21.591082,"_source": {"gdLocation": {"lon": "113.313978","lat": "23.120444"},"address": "寺右新马路131号","cityName": "广州市","commentPoint": 4.1,"minPrice": 190.0,"hotelName": "智营·星旅精选酒店(广州五羊邨地铁站店)"},"fields": {"distance_in_m": [3501.629279766179]}},{"_index": "hotel_test","_type": "_doc","_id": "HiMj1I0BqMZKQzdguS-z","_score": 21.376797,"_source": {"gdLocation": {"lon": "113.310007","lat": "23.153069"},"address": "先烈东路159号四航局大院4栋601房","cityName": "广州市","commentPoint": 4.2,"minPrice": 76.0,"hotelName": "广州兰姐青年公寓"},"fields": {"distance_in_m": [1563.7710672937392]}},{"_index": "hotel_test","_type": "_doc","_id": "QSIb1I0BqMZKQzdg6cMJ","_score": 21.36859,"_source": {"gdLocation": {"lon": "113.340093","lat": "23.173880"},"address": "元岗路600号自编2号(智汇park对面)","cityName": "广州市","commentPoint": 4.7,"minPrice": 152.0,"hotelName": "素舍2.0酒店(广州天河客运站天羽店)"},"fields": {"distance_in_m": [3046.3470547262573]}},{"_index": "hotel_test","_type": "_doc","_id": "ByIe1I0BqMZKQzdgYeOU","_score": 21.1093,"_source": {"gdLocation": {"lon": "113.341442","lat": "23.172095"},"address": "慧通产业园101栋A区","cityName": "广州市","commentPoint": 4.6,"minPrice": 176.0,"hotelName": "素舍酒店(广州天河客运站地铁站店)"},"fields": {"distance_in_m": [2953.2864749434843]}}]}
}

DECAY_FUNCTION-衰减函数

衰减函数(Decay Function)是一个数学函数,它用于描述一个数量随着时间、距离或其他因素递减的过程。衰减函数通常是指数函数或者多项式函数的形式,用以模拟现象如电磁波的衰减、放射性物质的衰变、药物在体内的代谢等。

在地理信息系统(Geographic Information Systems, GIS)或地理学领域中,衰减函数可以用来衡量地理位置之间的相互作用或影响随距离的递减。例如,一个城市的经济影响力对附近的城镇可能很大,但对更远的城镇影响则小得多,衰减函数可以用来量化这种影响力的减弱程度。

以下是一些衰减函数在地理领域的应用示例:

  1. 空间相互作用模型:在模拟城市之间的人口迁移、商业交往或通勤模式时,衰减函数可以用来表示随着距离增加,这些互动的可能性怎样降低。

  2. 热点分析:在热点分析中,可以用衰减函数来确定某一事件(如犯罪、病例报告等)对周围区域的影响,随距离递减。

  3. 可达性评估:在评估某个地点对于居民的可达性时,可以使用衰减函数来模拟不同交通模式(步行、开车等)的时间或距离衰减。

  4. 地理加权回归(Geographically Weighted Regression, GWR):在地理加权回归分析中,衰减函数用于赋予数据点一个权重,这个权重基于数据点之间的空间距离,更近的点有更大的影响力。

在具体应用中,选择合适的衰减函数类型和参数对模型结果的精确性有很大影响。常见的衰减函数形式包括:

  • 指数衰减函数:f(d) = e^(-λd),其中d是距离,λ是衰减系数。
  • 幂律衰减函数:f(d) = d^(-β),其中d是距离,β是衰减系数。

这些函数的参数通常需要根据实际数据进行拟合和调整,以最好地反映现实世界中的衰减现象。

elasticsearch 提供gauss、lin、exp 衰减函数,对比如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2813299.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2024河北国际光伏展

2024河北国际光伏展是一个专门展示和促进光伏技术与产业发展的国际性展览会。该展览会将于2024年在中国河北省举办,吸引来自世界各地的光伏企业、专家、学者和投资者参加。 展览会将展示最新的光伏技术和产品,包括太阳能电池板、光伏组件、逆变器、储能系…

洛谷 P2678 [NOIP2015 提高组] 跳石头(二分答案)

前提知识: 二分法往下其实有一些小分支,最常见的是二分查找,然后就是二分答案,浮点数二分等等 主要谈谈二分查找和二分答案的具体区别,我们不能光报个菜名随口就来,一问具体也说不出来个所以然。 前提&a…

GB28181 —— Ubuntu20.04下使用ZLMediaKit+WVP搭建GB28181流媒体监控平台(连接带云台摄像机)

最终效果 简介 GB28181协议是视频监控领域的国家标准。该标准规定了公共安全视频监控联网系统的互联结构, 传输、交换、控制的基本要求和安全性要求, 以及控制、传输流程和协议接口等技术要求,是视频监控领域的国家标准。GB28181协议信令层面使用的是SIP(Session Initiatio…

物联网手持终端机 超高频RFID手持终端工业级盘点PDA设备

在数字化时代,物联网手持终端机已经成为各行业不可或缺的工具。联强优创自主研发远距离手柄式超高频RFID读写手持终端,搭载高性能UHF读写模块,距离可达1-15米,基于IMPINJ E710芯片超高频模块与设备完美兼容,支持协议标…

图论基础(一)

一、图论 图论是数学的一个分支,它以图为研究对象。图论中的图是若干给定的点(顶点)以及连接两点的线(边)构成的图像,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物&#xff0c…

3.机器学习-十大算法之一线性回归算法(LinearRegression)原理讲解

3️⃣.机器学习-十大算法之一线性回归算法(LinearRegression)原理讲解 个人简介理解算法线性回归的一般模型 什么是线性?什么是非线性?什么是回归分析?损失函数算法优缺点优点缺点: 示例数学公式误差概率密…

Linux 内存管理概述(偏实战,略理论,附链接)

基础理论 1. 内存映射 可以参考: Linux内存映射 - 知乎 写的很详细,而且也有代码分析 2. 虚拟内存的空间分布 通过这张图你可以看到,用户空间内存,从低到高分别是五种不同的内存段。只读段,包括代码和常量等。数据段…

试用北大库博Cobot-SCA工具

最近试用北大软件工具的库博-SCA工具,其产品全称是库博软件成分分析与同源漏洞检测工具软件。这个产品名称有点长,至于原因,可能是为了与市场上其它SCA工具进行区分吧。北大库博SCA不是像大多数SCA工具,解析构建文件中的依赖组件进…

亿道丨三防平板丨手持平板丨加固平板丨助力地震救援

自土耳其发生7.8级大地震以来,一直都牵动着世人的心。2023年2月10日,据法新社最新消息,强震已造成土耳其和叙利亚两国超2万人遇难。报道称,相关官员和医护人员表示,地震造成土耳其17674人死亡,叙利亚则有33…

Linux--查看网络性能指标

一、性能指标有哪些? 带宽,表示链路的最大传输速率,单位是 b/s (比特 / 秒),带宽越大,其传输能力就越强。延时,表示请求数据包发送后,收到对端响应,所需要的…

跟着cherno手搓游戏引擎【25】封装2DRenderer,封装shader传参,自定义Texture

封装2DRenderer&#xff1a; Renderer.h: #include"ytpch.h" #include"Renderer.h" #include <Platform/OpenGL/OpenGLShader.h> #include"Renderer2D.h" namespace YOTO {Renderer::SceneData* Renderer::m_SceneData new Renderer::S…

在IDEA中创建vue hello-world项目

工作中最近在接触vue前端项目&#xff0c;记录一下从0搭建一个vue hello world项目的步骤 1、本地电脑安装配置node、npm D:\Project\vue\hello-world>node -v v14.21.3 D:\Project\vue\hello-world>npm -v 6.14.18 D:\Project\vue\hello-world> 2、设置npm国内淘…

C语言指针总结2

前言 本篇博客紧接着指针总结1来总结下数组和指针的关系&#xff0c;让我们一起来看一下数组与指针的“爱恨情仇”。 欢迎关注个人主页&#xff1a;小张同学zkf 若有问题&#xff0c;评论区见 文章目录 1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5.…

Layer1 明星项目 Partisia Blockchain 何以打造互操作、可创新的数字经济网络

我们的目标是创建一个以用户为中心的全新数字经济网络&#xff1a;在去信任化和公平透明的环境下&#xff0c;所有的隐私数据都能够得到天然保障&#xff0c;企业、用户等各角色的协作与共享将会更顺利地进行。 —— Partisia Blockchain 团队 作为一个以 Web3 安全为技术方向的…

数字化转型与制造企业绿色创新质量——基于供需双侧机制的再检验(2011-2022年)

参照马红&#xff08;2023&#xff09;的做法&#xff0c;本团队对来自软科学《数字化转型与制造企业绿色创新质量—基于供需双侧机制的再检验》一文中的基准回归部分进行复刻 一、数据介绍 数据名称&#xff1a;数字化转型与制造企业绿色创新质量 参考期刊&#xff1a;《软…

ClickHouse 指南(三)最佳实践 -- 跳数索引

Data Skipping Indexes Data Skipping Indexes 2 1、简介 影响ClickHouse查询性能的因素很多。在大多数情况下&#xff0c;关键因素是ClickHouse在计算查询WHERE子句条件时是否可以使用主键。因此&#xff0c;选择适用于最常见查询模式的主键对于有效的表设计至关重要。 然…

光学3D表面轮廓仪微纳米三维形貌一键测量

光学3D表面轮廓仪(白光干涉仪)利用白光干涉原理&#xff0c;以0.1nm分辨率精准捕捉物体的表面细节&#xff0c;实现三维显微成像测量&#xff0c;被广泛应用于材料学领域的研究和应用。 了解工作原理与技术 材料学领域中的光学3D表面轮廓仪&#xff0c;也被称为白光干涉仪&am…

05 动力云客之分页查询用户 + 查询用户详情 + 新增用户

1. 用户列表分页查询实现 核心 使用pageHelper实现分页 GetMapping(value "api/users")//分页的参数可以不传, 不传就默认设置为1public R userPage(RequestParam(value "current", required false) Integer current) {if (current null) {current …

STM32—PWM输出

目录 1 、 电路构成及原理图 2 、编写实现代码 main.c pwm.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 此笔记基于朗峰 STM32F103 系列全集成开发板的记录。 1 、 电路构成及原理图 PWM---Pulse Width Modulation&#xff0c;脉冲宽度调制&#xff0c;是…

通过跳板机拷贝远程服务器文件

## 背景 在日常开发或者运维中&#xff0c;经常会遇到开发环境与线上环境网络隔离&#xff0c;需要通过跳板机连接的场景&#xff0c;如果需要将目标机器上的定位信息搬迁到开发机做进一步排查时&#xff0c;经常取文件比较费劲&#xff0c;一般操作是将目标文件拷贝到跳板机&…