ElasticSearch 自动补全
1、前言
当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,根据用户输入的字母,提示完整词条的功能,就是自动补全。
2、安装拼音分词器
Github地址:https://github.com/infinilabs/analysis-pinyin
插件下载地址:https://release.infinilabs.com/analysis-pinyin/stable/
2.1 根据 ES 版本下载指定的插件包
2.2 安装步骤
- 下载插件并解压,重命名为:analysis-pinyin
- 上传 analysis-pinyin 到 es 的 plugin 目录
- 重启 es
- 测试
2.3 测试
DSL语法:
POST /_analyze
{"text":"刘德华","analyzer":"pinyin"
}
测试结果:
3、自定义分词器
默认的拼音分词器会将每个汉字单独分为拼音。我们希望的是每个词条形成一组拼音,需要对拼音分词器做个性化定制,形成自定义分词器。
3.1 ES 分词器(analyzer)组成部分:
- 字符过滤器(Character Filters):它主要用于在分词之前对原始文本进行预处理。这一步骤可以对文本进行清洗、转换等操作,例如去除 HTML 标签、转换字符大小写、处理特殊字符等。
- 分词器(Tokenizer):分词器负责将经过字符过滤器处理后的文本按照一定的规则分解为单个的词元(Token)。这些规则可以基于空格、标点符号等进行分词,不同的分词器有不同的分词策略。例如,standard 分词器会按照空格和标点符号来划分词元,将文本拆分成一个个独立的单词或符号。
- 词元过滤器(Token Filters):词元过滤器用于对分词器产生的词元进行进一步的处理。这可以包括过滤掉停用词(如 “的”、“是” 等在某些情况下对搜索意义不大的词)、词形还原(将词元还原为其基本形式,如将 “running” 还原为 “run”)、同义词替换(将一个词元替换为其同义词,如将 “电脑” 替换为 “计算机”)等操作。
3.2 执行流程图
说明:特殊符号准换成指定的中文字符,然后借助 ik_smart 进行分词,再通过 pinyin 分词器 转换成 拼音词条。
3.3 测试
DSL 语法:
{"settings": {"analysis": {"analyzer": {"py_analyzer": {"tokenizer": "ik_max_word","filter": "py"}},"filter": {"py": {"type": "pinyin",// "keep_separate_first_letter": true,"keep_full_pinyin": false,"keep_joined_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"remove_duplicated_term": true,"none_chinese_pinyin_tokenize": false}}}},"mappings": {"properties": {"name": {"type": "text","analyzer": "py_analyzer","search_analyzer": "ik_smart"}}}
}
字段说明:
-
analysis:定义分析(analysis)部分,这里可以指定自定义的分析器、分词器、过滤器或字符过滤器。
- py_analyzer:自定义分析器名,
- ik_max_word:中文分词器,它会尽可能多地切分出词语。
- filter:“py” 是指在分词后将应用的过滤器名称
- filter:定义过滤器配置信息
- py: 自定义过滤器名称,与 py_analyzer 指定的 filter 一致
- type: 指定过滤器类型为pinyin,即拼音过滤器
- keep_separate_first_letter: 是否保留每个汉字的首字母,
- keep_full_pinyin: 是否保留全拼
- keep_joined_full_pinyin: 是否保留连在一起的完整拼音
- keep_original:是否保留原始文本
- limit_first_letter_length:限制首字母长度为N个字符
- remove_duplicated_term: 是否去除重复的词条
- none_chinese_pinyin_tokenize:是否对非中文内容不进行拼音分词
- py: 自定义过滤器名称,与 py_analyzer 指定的 filter 一致
- py_analyzer:自定义分析器名,
-
mappings:映射
- properties:定义文档字段
- name:字段名
- type:字段类型
- analyzer:在索引时使用 py_analyzer 分析器
- search_analyzer:在搜索时使用 ik_smart 分析器,它会根据上下文智能地选择分词方式
- name:字段名
- properties:定义文档字段
测试结果:
3.4 analyzer 与 search_analyzer 的区别
在 Elasticsearch 中,analyzer 和 search_analyzer 是用来控制文本如何被分析(即分词和转换)的两个不同阶段的设置。它们的主要区别在于应用的时机和目的。
Analyzer
- 应用时机:analyzer 设置应用于索引时间。当文档被索引时,字段的内容会通过指定的分析器进行处理,然后将结果存储在倒排索引中。
- 作用:确保数据以一种结构化的方式存储,使得后续的搜索更加高效和准确。例如,中文文本可能会被分词成单个词语,并可能转换为小写或拼音形式等,以便于检索。
Search Analyzer
- 应用时机:search_analyzer 设置应用于查询时间。当执行搜索请求时,查询字符串会通过指定的搜索分析器进行处理,以便生成与索引中的词条相匹配的形式。
- 作用:确保查询字符串按照与索引内容相同的方式进行处理,从而提高搜索的相关性和准确性。它允许你对索引和搜索过程使用不同的分析逻辑,比如可以在索引时采用更细粒度的分词,在搜索时采用更智能的分词方式。
区别总结
- 索引 vs 搜索:analyzer 用于索引阶段的数据预处理,而 search_analyzer 用于搜索阶段的查询字符串预处理。
- 灵活性:如果未显式定义 search_analyzer,则默认使用字段的 analyzer。但是,有时为了优化搜索体验,你可能希望在搜索时使用不同于索引时的分析策略,这时就可以单独配置 search_analyzer。
4、自动补全查询
ElasticSearch 提供了 Completion Suggester 查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。
对于文档中字段的类型有一些约束:
- 参与补全查询的字段必须是 completion 类型
- 字段的内容一般是用来补全的多个词条形成的数组
demo 测试:
创建索引库:
PUT /test
{"mappings": {"properties": {"title":{"type":"completion"}}}
}
插入测试文档:
POST test/_doc
{"title": ["Sony", "WH-1000XM3"]
}POST test/_doc
{"title": ["SK-II", "PITERA"]
}POST test/_doc
{"title": ["Nintendo", "switch"]
}
查询所有文档:
自动补全查询:
定义 DSL 语法:
GET test/_search
{"suggest": { // 使用 Suggest 功能"title_suggest": { // 自定义 Suggest 名称,可以是任何标识符"text": "s", // 输入文本 "s",表示自动补全的起始字符串"completion":{ // 使用 Completion Suggestion 类型"field":"title", // 提供自动补全建议的字段"skip_duplicates":true, // 跳过重复的建议,避免显示重复内容"size":10 // 限制返回建议的数量为 10 个}}}
}
测试结果:
5、酒店搜索测试案例
问题:我们的 hotel 索引库还没有设置拼音分词器,需要修改索引库中的配置信息。但是我们知道索引库是无法修改的,只能删除然后重新创建。
分析:
- 修改 hotel 索引库结构,设置自定义拼音分词器,添加新字段,用来做自动补全,将 brand、suggestion、city等都放进去,作为自动补全的提示。
- 修改索引库的 name、all 字段,使用自定义分词器。
- 将 brand、business 添加到 suggestion 字段。
- 重新导入数据到索引库
5.1 定义 hotel 索引库
DSL 创建 hotel 索引:
PUT /hotel
{"settings": {"analysis": {"analyzer": {"text_analyzer": {"tokenizer": "ik_max_word","filter": "py"},"completion_analyzer": {"tokenizer": "keyword","filter": "py"}},"filter": {"py": {"type": "pinyin",// "keep_separate_first_letter": true,"keep_full_pinyin": false,"keep_joined_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"remove_duplicated_term": true,"none_chinese_pinyin_tokenize": false}}}},"mappings": {"properties": {"id": {"type": "keyword"},"name": {"type": "text","analyzer": "text_analyzer","search_analyzer": "ik_smart","copy_to": "all"},"address": {"type": "keyword","index": false},"price": {"type": "integer"},"score": {"type": "integer"},"brand": {"type": "keyword","copy_to": "all"},"city": {"type": "keyword","copy_to": "all"},"starName": {"type": "keyword"},"business": {"type": "keyword","copy_to": "all"},"location": {"type": "geo_point"},"pic": {"type": "keyword","index": false},"all": {"type": "text","analyzer": "text_analyzer","search_analyzer": "ik_smart"},"suggestion": {"type": "completion","analyzer": "completion_analyzer"}}}
}
5.2 插入 hotel 文档数据
将 brand、city、business 字段内容放入 suggestion 字段中。
public function batchAddDoc()
{$hotels = Hotel::order(['id' => 'asc'])->select();$params = [];foreach ($hotels as $hotel) {$params['body'][] = ['index' => ['_index' => 'hotel','_id' => $hotel->id,]];# 添加搜索字段$suggestions = [];$suggestions[] = $hotel->brand;$suggestions[] = $hotel->city;if (strpos($hotel->business, '/') !== false) {$suggestions = array_merge($suggestions, explode('/', $hotel->business));} elseif (strpos($hotel->business, '、') !== false) {$suggestions = array_merge($suggestions, explode('、', $hotel->business));} else {$suggestions[] = $hotel->business;}$params['body'][] = ['id' => $hotel->id,'name' => $hotel->name,'address' => $hotel->address,'price' => $hotel->price,'score' => $hotel->score,'brand' => $hotel->brand,'city' => $hotel->city,'starName' => $hotel->star_name,'business' => $hotel->business,'location' => $hotel->latitude . ',' . $hotel->longitude,'pic' => $hotel->pic,'suggestion' => $suggestions];}$result = $this->client->bulk($params);return json($result);
}
5.3 查询 hotel 文档数据
5.4 自动补全搜索
DSL 语句:
GET hotel/_search
{"suggest": { // 使用 Suggest 功能"search_suggest": { // 自定义 Suggest 名称,可以是任何标识符"text": "rj", // 输入文本 "rj",表示自动补全的字符串"completion":{ // 使用 Completion Suggestion 类型"field":"suggestion", // 提供自动补全建议的字段"skip_duplicates":true, // 跳过重复的建议,避免显示重复内容"size":10 // 限制返回建议的数量为 10 个}}}
}
测试结果:
PHP 测试示例:
public function search()
{$prefix = 'bj';$result = $this->client->search(['index' => 'hotel','body' => ['suggest' => ['search_suggest' => ['text' => $prefix,'completion' => ['field' => 'suggestion','skip_duplicates' => true,'size' => 10]]]]]);$options = $result['suggest']['search_suggest'][0]['options'];$data = [];foreach ($options as $option) {$data[] = $option['text'];}return json($data); // 输出:["北京","北京展览馆地区","北京站","北京西站","布吉"]
}
相关文章:
ElasticSearch 自动补全
1、前言 当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,根据用户输入的字母,提示完整词条的功能,就是自动补全。 2、安装拼音分词器 Github地址:https://github.com/infinilabs/analysis-pinyin 插件…...
整点(枚举)
Hello!大家好!我是学霸小羊,今天分享一道c枚举题: 题目描述 在二维坐标系, 有一个圆,圆心在(0,0),圆的半径是r。问圆内有多少个整点(所谓的整点就是横坐标和纵坐标都是整数的点)。若点P的横坐标是整数a&a…...
【WRF安装】WRF编译错误:problems building executables look for error in the build log
WRF编译错误 错误内容:problems building executables, look for error in the build log原因1:gcc版本过低安装高版本gcc 原因2:netcdf版本和配置有误原因3:库冲突原因4:export NETCDF_classic1终极手段:重…...
2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程
2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程 产品介绍 仿东郊到家约玩系统是一种新兴的线上预约,线下社交、陪伴、助娱、助攻、分享、解答、指导等服务模式,范围涉及电竞、运动、音乐…...
社区版 IDEA 开发webapp 配置tomcat
1.安装tomcat 参考Tomcat配置_tomcat怎么配置成功-CSDN博客 2.构建webapp项目结构 新建一个普通项目 然后添加webapp的目录结构: main目录下新建 webapp 文件夹 webapp文件夹下新建WEB_INF文件夹 *WEB_INF目录下新建web.xml wenapp文件夹下再新建index.html …...
IDEA中解决Edit Configurations中没有tomcat Server选项的问题
今天使用IDEA2024专业版的时候,发现Edit Configurations里面没有tomcat Server,最终找到解决方案。 一、解决办法 1、打开Settings 2、搜索tomcat插件 搜索tomcat插件之后,找到tomcat 发现tomcat插件处于未勾选状态,然后我们将其勾选保存即可。 二、结果展示 最后,再次编…...
【Python】主成分分析PCA - 算法、问题与Python实现
【Python】主成分分析PCA - 算法、问题与Python实现 一、PCA 算法简介(一)概念及作用(二)基本原理(三)算法步骤1.数据预处理2.计算协方差矩阵3.进行特征值分解4.选择主成分5.完成数据降维 二、PCA 常见问题…...
Go怎么做性能优化工具篇之pprof
工欲善其事、必先利其器。这次我们来看看Go的性能优化工具有哪些吧 Go性能优化的工具 一、pprof 工具 pprof 是 Go 语言自带的性能分析工具,可以帮助开发者分析程序的 CPU 使用情况、内存使用情况、goroutine 调度情况等,从而定位性能瓶颈。通过 pprof…...
DataOps驱动数据集成创新:Apache DolphinScheduler SeaTunnel on Amazon Web Services
引言 在数字化转型的浪潮中,数据已成为企业最宝贵的资产之一。DataOps作为一种文化、流程和实践的集合,旨在提高数据管道的质量和效率,从而加速数据从源头到消费的过程。白鲸开源科技,作为DataOps领域的领先开源原生公司…...
递归读取指定目录下的文件
序言 需要读取sftp服务器上符合指定的文件名正则的文件列表,目前想到的最好的办法就是递归。 我这里引入的依赖是: <!-- jsch-sftp连接 --><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artif…...
代码随想录算法训练营day46|动态规划part12
今天就结束动态规划章节了,以后还要多加练习。 今天的两道题都很有难度,647回文子串的思路非常巧妙,因为用一维dp数组比较难表示子串的起点和终点,所以需要用二维dp数组表示,dp[i][j]表示以i为起点,j为终点…...
ubuntu 24.04.1安装FTP流程
1、安装vsftpd: sudo apt update sudo apt install vsftpd 2、安装后重启查看vsftpd状态 sudo systemctl status vsftpd 输出如下所示,表明vsftpd服务处于活动状态并正在运行: * vsftpd.service - vsftpd FTP server Loaded: loaded (/…...
【Linux】UDP通信
udp使用的是数据报传输。可以一对一,一对多进行传输,用于快速,实时性高的场景 服务器端: 使用步骤: 1.创建socket 2.bind绑定可接收的客户端 3.while{ recv接收数据 send发送数据 } #include <stdio.h> #inclu…...
日期格式、JSR303校验
日期格式 public class Monster() {DateTimeFormat(pattern "yyyy-MM-dd")private Date birthday; } 输入:2024-11-12, 输出:Monster{birthdaySun Nov 12 00:00:00 CST 2024} public class Monster {JsonFormat(pattern &…...
ELK系列-(六)Redis也能作为消息队列?(上)
一、前文回顾 🔍 在前面的ELK系列中,我们已经搭建了ELK的核心组件,包括: ELK系列-(一)Docker部署ELK核心组件ELK系列-(二)LogStash数据处理的瑞士军刀ELK系列-(三&…...
点击展示大图预览
原文链接在table表格里能够实现,点击里面的图片实现大图预览的效果; 一、先安装viewer — 使用npm安装 npm install v-viewer --save二、在main.js中引入 import Viewer from v-viewer //点击图片大图预览 import viewerjs/dist/viewer.css Vue.use(…...
游戏AI实现-寻路算法(BFS)
广度优先搜索算法(英语:Breadth-first search,缩写:BFS),又译作宽度优先搜索,或横向优先搜索,是一种图形搜索算法。 寻路地图搭建: 游戏AI实现-寻路地图搭建-CSDN博客 …...
tryhackme-Pre Security-HTTP in Detail(HTTP的详细内容)
任务一:What is HTTP(S)?(什么是http(s)) 1.What is HTTP? (HyperText Transfer Protocol)(什么是 HTTP?(超文本传输协议)) http是你查看网站的时候遵循的…...
CNN和Transfomer介绍
文章目录 CNN和Transfomer介绍CNN和Transfomer的区别1. **基本概念**2. **数据处理方式**3. **模型结构差异**4. **应用场景区别** 自注意力机制1. **自注意力机制的概念**2. **自注意力机制的实现步骤**3. **自注意力机制的优势** Transformer结构组成1. **多头注意力层&#…...
37. Three.js案例-绘制部分球体
37. Three.js案例-绘制部分球体 实现效果 知识点 WebGLRenderer WebGLRenderer 是Three.js中的一个渲染器类,用于将3D场景渲染到网页上。 构造器 WebGLRenderer( parameters : Object ) 参数类型描述parametersObject渲染器的配置参数,可选。 常用…...
Latex+VsCode+Win10搭建
最近在写论文,overleaf的免费使用次数受限,因此需要使用本地的形式进行编译。 安装TEXLive 下载地址:https://mirror-hk.koddos.net/CTAN/systems/texlive/Images/ 下载完成直接点击iso进行安装操作。 安装LATEX Workshop插件 设置VsCode文…...
【ETCD】【Linearizable Read OR Serializable Read】ETCD 数据读取:强一致性 vs 高性能,选择最适合的读取模式
ETCD 提供了两种不同类型的读取操作方式,分别是 Linearizable Read(线性化读取)和 Serializable Read(可串行化读取)。这两种方式主要区分在读取数据时对一致性的要求不同。 目录 1. Linearizable Read(线…...
windows下搭建本地sofa-registry
官方介绍: SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。SOFARegistry 最早源自于淘宝的 ConfigServer,十年来,随着蚂蚁金服的业务发展,注册中心架构已经演进至第五代。目前 SOFARegistry 不仅全面服…...
什么是MyBatis
MyBatis 简介 MyBatis 是一个流行的 Java 持久层框架(Persistence Framework),它主要用于简化数据库操作,提供了对数据库的映射支持,使得开发人员能够通过简单的配置和映射文件来执行数据库操作(如增、删、…...
Docker如何运行一个Java的jar包程序
Docker如何运行一个Java的jar包程序 1、jar包程序 2、start.sh运行jar包脚本 #!/bin/bash #进入目录 cd /app #1.下载SDK并安装 java -jar SDKDown1.4.jar #2.加载环境变量 export LD_LIBRARY_PATH/opt/casb/CipherSuiteSdk_linux/lib echo $LD_LIBRARY_PATH #3.执行SDK java …...
c语言----顺序结构
顺序结构的基本概念 定义:顺序结构是C语言程序中最基本的结构,它按照语句的先后顺序依次执行。就像我们日常做事一样,一步一步地按照顺序来完成任务。在C语言程序中,从程序的第一条语句开始,逐句向下执行,…...
BERT采用双向训练
BERT采用双向训练 定义 BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型。它在自然语言处理(NLP)领域具有极其重要的地位,由谷歌在2018年提出,能够对文本进行深度的语义理解,从而广泛应用于各种语言相关的任务…...
流程引擎Activiti性能优化方案
流程引擎Activiti性能优化方案 Activiti工作流引擎架构概述 Activiti工作流引擎架构大致分为6层。从上到下依次为工作流引擎层、部署层、业务接口层、命令拦截层、命令层和行为层。 基于关系型数据库层面优化 MySQL建表语句优化 Activiti在MySQL中创建默认字符集为utf8&…...
安卓 文件管理相关功能记录
文件管理细分为图片、视频、音乐、文件四类 目录 权限 静态声明权限 动态检查和声明权限方法 如何开始上述动态申请的流程 提示 图片 获取图片文件的对象列表 展示 删除 视频 获取视频文件的对象列表 获取视频file列表 按日期装载视频文件列表 展示 播放 删除…...
监控视频汇聚融合云平台一站式解决视频资源管理痛点
随着5G技术的广泛应用,各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据,并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而,随着数字化建设和生产经营管理活动的长期开展࿰…...
【jvm】主要参数
Java 虚拟机(JVM)有许多参数用于控制其行为和性能,下面是一些 主要的 JVM 启动参数,这些参数通常分为以下几类: 内存管理相关参数 这些参数主要用来配置 JVM 的内存分配策略、堆内存、栈内存等。 -Xms 设置 JVM 启动…...
在Ubuntu中配置mysql,并允许外部访问数据库
在虚拟机中安装 MySQL 并允许外部访问,可以按照以下步骤操作: 1. 更新系统包 首先,确保你的系统是最新的,使用以下命令更新包列表: sudo apt update sudo apt upgrade2. 安装 MySQL Server 安装 MySQL 服务&#x…...
Golang的向前兼容性和toolchain规则,Go1.21.0
在 Go 1.21 中,在工具上新增了两个变化:增强了向前兼容性;工具链管理。 向前兼容性 在以前的版本中,Go 工具链尝试编译依赖于新版本的代码时,可能会遇到兼容性问题。例如,如果你的代码依赖于 Go 1.18 引入…...
如何有效修复ffmpeg.dll错误:一站式解决方案指南
当您遇到提示“ffmpeg.dll文件丢失”的错误时,这可能导致相关的应用程序无法启动或运行异常。本文将详细介绍如何有效地解决ffmpeg.dll文件丢失的问题,确保您的应用程序能够恢复正常运行。 ffmpeg.dll是什么?有哪些功能? ffmpeg.…...
更频繁的 Android SDK 发布:更快的创新、更高的质量和更完善
Android 一直致力于让创新更快地进入用户手中。除了每年的平台发布之外,我们还投资了Project Treble、Mainline、Google Play 服务、每月安全更新和季度发布,为 Pixel Drops 提供支持。 未来,Android 将更频繁地发布 SDK,计划于 …...
远程连接:构建智能家居舒适生活
远程连接技术让智能家居从梦想照进现实,为人们构建了舒适便捷的生活环境。通过家庭网络与各种智能设备的远程连接,用户可以在外出时,使用手机 APP 轻松控制家中的灯光、窗帘、空调、电视等设备。 例如,在炎热的夏天,下…...
Python 爬取网页文字并保存为 txt 文件教程
引言 在网络数据获取的过程中,我们常常需要从网页中提取有用的文字信息。Python 提供了强大的库来帮助我们实现这一目标。本教程将以https://theory.gmw.cn/2023 - 08/31/content_36801268.htm为例,介绍如何使用requests库和BeautifulSoup库爬取网页文字…...
多协议视频监控汇聚/视频安防系统Liveweb搭建智慧园区视频管理平台
智慧园区作为现代化城市发展的重要组成部分,不仅承载着产业升级的使命,更是智慧城市建设的重要体现。随着产业园区竞争的逐渐白热化,将项目打造成完善的智慧园区是越来越多用户关注的内容。 然而我们往往在规划前期就开始面临众多难题&#…...
InnoDB 查询成本
1. 单表查询成本 连接查询总成本 IO 成本 CPU 成本对于 InnoDB 存储引擎来说,页是磁盘和内存之间交互的基本单位,设计MySQL的大叔规定读取一个页面花费的成本默认是 1.0,读取以及检测一条记录是否符合搜索条件的成本默认是 0.2。1.0、0.2 …...
C++的高精度减法 分步详解
高精度减法计算原理 在读小学时,我们做减法都采用竖式方法,如图 1 所示。 这样,我们可以写出两个整数相减的算法。 我们就可以用 C 语言来模拟这个竖式减法的过程。我们可以考虑利用 C 的数组来存储对应数据,假设用数组 A 存储被…...
linux cpu 管理
视频教程:ubuntu cpu 管理_哔哩哔哩_bilibili 概述 平均负载,CPU 使用率,CPU上下文 1 平均负载 #查看命令: rootzyb:~# uptime 18:21:47 up 1:09, 2 users, load average: 0.00, 0.00, 0.00 依次则是过去 1 分钟、5 分钟、1…...
大批量URL去重的架构设计(redis-bitmap+redisson)
1. 引言 什么是数据去重? 在大数据处理中,去重是指消除重复数据,只保留唯一的数据记录。 去重的重要性 提高数据处理效率,节省存储空间,提升数据分析的准确性。 常见的去重技术 基于哈希函数、布隆过滤器、位图等方法…...
WebGPU跨平台应用开发
对于 Web 开发人员来说,WebGPU 是一个 Web 图形 API,可提供对 GPU 的统一和快速访问。WebGPU 公开了现代硬件功能,并允许在 GPU 上进行渲染和计算操作,类似于 Direct3D 12、Metal 和 Vulkan。 虽然这是真的,但这个故事…...
Proteus(8.15)仿真下载安装过程(附详细安装过程图)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Proteus是什么? 二、下载链接 三、下安装步骤 1.解压,有键管理员运行 2.点击Next,进行下一步 3.勾选I accept…&#…...
vlan和vlanif
文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法,vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…...
Unity开发哪里下载安卓Android-NDK-r21d
google的东西,居然是完全开源的 真的不是很多公司能做到,和那种伪搜索引擎是不同的 到底什么时候google才会开始造车 不过风险很多,最好不要合资,风险更大...
期末速成C++【初识C++】
目录 1.英文单词 2.C的特点 3.C对C语言的补充 3.1命名空间和域操作符 🎇3.2控制台输入输出 3.3类型增强 3.3.1const常变量 3.3.2const与指针 3.3.3布尔类型与枚举类型 3.4默认参数 🎇3.5函数重载 🎇引用 3.6.1引用做函数参数 …...
爬虫案例学习6
获取淘宝商品数据2024-12-18 参考学习: 大佬博客 视频教程 通过搜索发现,数据是通过发送请求过来的,不是静态存在源代码的 所以我们需要请求这个接口获取数据:比如标题,价格,图片等信息 https://h5api.m…...
28、论文阅读:基于像素分布重映射和多先验Retinex变分模型的水下图像增强
A Pixel Distribution Remapping and Multi-Prior Retinex Variational Model for Underwater Image Enhancement 摘要介绍相关工作基于模型的水下图像增强方法:无模型水下图像增强方法:基于深度学习的水下图像增强方法: 论文方法概述像素分布…...
[BJDCTF2020]ZJCTF,不过如此 1
[BJDCTF2020]ZJCTF,不过如此 1 打开实例发现代码审计 需要GET传入text和file参数,然后执行文件包含 text需要读取到I have a dream文本,这边采用data流进行绕过 ?textdata://,I have a dream&filenext.php成功绕过,接下来…...