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

ElasticSearch 基础(五)之 映射

目录

  • 前言
  • 一、映射(Mapping)简介
  • 二、动态映射(Dynamic mapping)
    • 1、动态字段映射
      • 1.1、日期检测
        • 1.1.1、禁用日期检测
        • 1.1.2、自定义检测到的日期格式
      • 1.2、数值检测
    • 2、动态模板
  • 三、显示映射(Explicit mapping)
    • 1、使用显式映射创建索引
    • 2、添加新字段到现有映射
    • 3、更新字段的映射
    • 4、查看特定字段的映射
  • 四、运行时字段(Runtime fields)
  • 五、映射类型(Field data types)
  • 六、元数据字段(Metadata fields)
  • 七、映射参数(Mapping parameters)
  • 八、映射限制设置(Mapping limit settings)


前言

本文主要内容转载于:ES Doc - mapping。


一、映射(Mapping)简介

映射(Mapping) 是定义文档及其包含的字段如何存储和索引的过程。

每个文档都是字段的集合,每个字段都有自己的数据类型。映射数据时,创建映射定义,其中包含与文档相关的字段列表,决定字段使用什么分词器解析,是否有子字段等。映射定义还包括元数据字段,如_source 字段,用于自定义如何处理文档的关联元数据。

Elasticsearch 8.xMySQL
Index(索引)Table(数据表)
Dcoument(文档)Row(行)
Fields(字段)Column(列)

在 ES 7.0.0之前,映射定义包含一个类型名。ES 7.0.0及更高版本不再接受默认映射。请参见 删除映射类型。

ES 使用 动态映射显式映射 来定义数据。

  • 动态映射(Dynamic mapping):可以根据写入文档的内容,来推断字段和数据类型,创建索引结构。
  • 显式映射(Explicit mapping):不希望使用默认值的字段,或获得对创建字段的更大控制,可以允许 ES 动态添加修改其他字段。


查看索引的映射:可以使用 获取映射 API 查看 现有索引。

语法:

GET /<index>/_mapping

测试:

//请求:
GET /test2/_mapping
//返回:
{"test2": {"mappings": {"properties": {"age": {"type": "long"},"email": {"type": "text"},"name": {"type": "keyword"}}}}
}

二、动态映射(Dynamic mapping)

自动检测和添加新字段称为 动态映射。可以自定义动态映射规则以适合您的情况 目的:

  • 动态字段映射:管理动态字段检测的规则。
  • 动态模板:用于配置动态添加字段映射的自定义规则。

1、动态字段映射

当 ES 检测到文档中的新字段时,默认情况下会将该字段动态添加到类型映射中。dynamic 参数控制此行为,通过将参数 dynamic 设置为 trueruntime,您可以明确指示 ES 根据传入的文档动态创建字段。

dynamic 参数意义
true新字段被添加到映射中(默认)。
runtime新字段作为运行时字段添加到映射中。这些字段未编入索引,而是查询时加载在 _source 中。
false新字段被忽略。这些字段将不会被索引或搜索,但仍会出现在 _source 返回的匹配字段中。这些字段不会添加到映射中,必须显式添加新字段。
strict如果检测到新字段,则会引发异常并拒绝文档。必须将新字段显式添加到映射中。

启用动态字段映射后,ES 使用下表中的规则来确定如何映射每个字段的数据类型,下表中的字段数据类型是 ES 动态检测的唯一字段数据类型,所有其他数据类型必须显式映射。

JSON data type“dynamic”:“true”“dynamic”:“runtime”
null不添加字段映射不添加字段映射
true or falsebooleanboolean
doublefloatdouble
longlonglong
objectobjectNo field added
array取决于数组中的第一个非值null取决于数组中的第一个非值null
通过日期检测的字符串datedate
通过数值检测的字符串float or longdouble or long
未通过日期检测或数值检测的字符串text with a .keyword sub-fieldkeyword

1.1、日期检测

如果启用日期检测 date_detection(默认),则选中新字符串字段以查看其内容是否与 dynamic_date_formats 中指定的任何日期模式匹配。如果找到匹配项,则新的日期字段为 添加了相应的格式。

dynamic_date_formats 默认值为:

[ “strict_date_optional_time”,"yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]

strict_date_optional_time 是 date_optional_time 的严格级别,这个严格指的是年份、月份、天必须分别以4位、2位、2位表示,不足两位的话第一位需用0补齐。

1.1.1、禁用日期检测

可以通过设置为:date_detection:false

PUT <index>
{"mappings": {"date_detection": false}
}

开始测试:

DELETE test2			# 删除之前的测试索引
PUT test2				# 禁用日期检测
{"mappings": {"date_detection": false}
}
PUT /test2/_doc/1 		# 索引文档{"time": "2020/10/01"
}//请求:
GET /test2/_mapping 	# 查看映射,time 类型变为 text 了
//返回
{"test2": {"mappings": {"date_detection": false,"properties": {"time": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}

1.1.2、自定义检测到的日期格式

或者,你可以设置 dynamic_date_formats 定制想要的 自己的日期格式:

PUT <index>
{"mappings": {"dynamic_date_formats": ["MM/dd/yyyy"]}
}

测试:

// 准备:
DELETE test2
PUT test2
{"mappings": {"dynamic_date_formats": ["yyyy-MM-dd"]}
}
PUT /test2/_doc/1
{"time": "2020-10-01"
}// 查看映射:
GET /test2/_mapping
{"test2": {"mappings": {"dynamic_date_formats": ["yyyy-MM-dd"],"properties": {"time": {"type": "date","format": "yyyy-MM-dd"}}}}
}

1.2、数值检测

虽然 JSON 支持本机浮点和整数数据类型,但一些 应用程序或语言有时可能会将数字呈现为字符串。通常 正确的解决方案是显式映射这些字段,但 数字检测默认情况下禁用,想要启用使用以下操作:

PUT <index>
{"mappings": {"numeric_detection": true}
}

测试:

// 准备
DELETE test2
PUT test2
{"mappings": {"numeric_detection": true}
}
PUT /test2/_doc/1
{"test_int": "100","test_float": "100.01"
}// 查看映射类型
GET /test2/_mapping
{"test2": {"mappings": {"numeric_detection": true,"properties": {"test_float": {"type": "float"			# test_float 自动映射为 float 类型},"test_int": {"type": "long"			# test_int 自动映射为 long 类型}}}}
}

2、动态模板

动态模板(Dynamic templates) 允许您更好地控制 ES 如何将数据映射到默认的动态字段映射规则之外,通过将参数 dynamic 设置为 trueruntime,可以启用动态映射。然后,您可以使用动态模板定义自定义映射,这些映射可以根据匹配条件应用于动态添加的字段。

注意:只有当字段包含具体值时,才会添加动态字段映射。当字段包含null或空数组时,ES 不会添加动态字段映射。如果在 dynamic_template 中使用了 null_value 选项,则只有在为字段指定了具体值的第一个文档编制索引后,才会应用该选项。

详细内容参考:动态模板示例。


三、显示映射(Explicit mapping)

您对自己的数据了解比 ES 所能猜到的还要多,因此,虽然 动态映射(Dynamic mapping) 对入门很有用,但在某些时候,您可能需要指定自己的 显式映射(Explicit mapping)

创建索引并将字段添加到现有索引时,可以创建字段映射。

1、使用显式映射创建索引

您可以使用创建索引API创建具有显式映射的新索引。

当我们创建一份数据查看它的动态映射:

// 1、创建测试文档
POST /test2/_doc/1
{"name":"王五","age":1,"email": "11111@qq.com"
}// 2、查看动态映射
GET /test2/_mapping
{"test2": {"mappings": {"properties": {"age": {"type": "long"},"email": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}

动态映射结果:

  • age :默认long 类型;但是我们并不需要这么大的长度,目前人类最大年龄是134岁,所以设置 short 就够了;
  • name :默认 text + keyword;这里的名称只要求 keyword 类型,不分词;
  • email :默认 text + keyword;邮箱强制只要求 text 类型,只分词;

text :会分词,先把对象进行分词处理,然后再再存入到es中。
keyword:不分词,没有把对象进行分词处理,而是存入了整个对象,这时候等值查询才能查到。

当我们新建一个索引时,我们可以先索引一个文档,去查看映射,复制下来再修改成我们想要的效果。

# 设置新索引映射:
//请求:
PUT /test2
{"mappings": {"properties": {"age": {"type": "long"},"email": {"type": "text"},"name": {"type": "keyword"}}}
}
//返回:
{"acknowledged": true,"shards_acknowledged": true,"index": "test2"
}# 查看映射
//请求:
GET /test2/_mapping
//返回:
{"test2": {"mappings": {"properties": {"age": {"type": "long"},"email": {"type": "text"},"name": {"type": "keyword"}}}}
}

2、添加新字段到现有映射

可以使用 更新映射 API 添加一个或多个新的字段到现有索引。

测试:为新字段 addres 添加映射。

//请求:
PUT /test2/_mapping
{"properties": {"address": {"type": "keyword"}}
}
//返回:
{"acknowledged": true
}//请求:
GET /test2/_mapping
//返回:
{"test2": {"mappings": {"properties": {"address": {"type": "keyword"},"age": {"type": "long"},"email": {"type": "text"},"name": {"type": "keyword"}}}}
}

3、更新字段的映射

除了支持的 映射参数 外,您不能更改现有字段的映射或字段类型。更改现有字段可能会使已编入索引的数据失效。 如果需要更改数据流备份索引中字段的映射,请参阅 更改数据流的映射和设置。

如果需要更改其他索引中字段的映射,请使用正确的映射创建一个新索引,然后将数据 reindex 到该索引中。

重命名字段将使已在旧字段名称下索引的数据无效。相反,添加 alias 字段以创建备用字段名。

4、查看特定字段的映射

如果只想查看一个或多个特定字段的映射,则可以使用 获取字段映射 API。如果您不需要索引的完整映射,或者索引包含大量字段,这将非常有用。

语法:

GET /<index>/_mapping/field/<field>

测试:

//请求:
GET /test2/_mapping/field/email
//返回:
{"test2": {"mappings": {"email": {"full_name": "email","mapping": {"email": {"type": "text"}}}}}
}

四、运行时字段(Runtime fields)

我们知道, 从历史上看,ES 依靠 写时模式(Schema on write) 的模式来快速搜索数据。如果一个索引,在一开始是没有定义映射的,那么当我们写入第一个数据时,ES 会根据自己的猜测来给写入的文档的字段定义类型。现在,我们向 ES 添加了 Schema on read 模式,以便用户可以灵活地在读取后更改文档的 schema,还可以生成仅作为搜索查询一部分存在的字段。这个字段只存在于 read 的时候,也就是在查询的时候。Schema on readSchema on write 一起为用户提供了选择,可以根据他们的需求来平衡性能和灵活性。

写时模式(Schema on write):在写入文档的同时,如果该字段从来没有被创建过,ES 会自动帮我们生产相应的字段 content。
读时模式(Schema on read): 当对数据运行查询时,可以即时创建其他字段。 你不需要提前对数据有深入的了解,也不必预测数据最终可能被查询的所有可能方式。 你可以随时更改数据结构,即使在文档已被索引之后 —— 读时模式的巨大好处。

Runtime fields 的使用,让 Schema on read 模式成为可能。

如果我们想根据日志总结我们的服务投放了多少广告,我们需要先提取这些日志消息相关信息以便进行聚合。

最简单的方法是使用 运行时字段(runtime fields)。 此功能允许你在文档中定义其他字段,即使它们不存在于你发送到 Elasticsearch 的原始值中。

Runtime field 也被称为运行时字段。运行时字段是在查询时评估的字段。 运行时字段使你能够:

  • 在不重新索引数据的情况下向现有文档添加字段;
  • 在不了解数据结构的情况下开始处理数据;
  • 在查询时覆盖从索引字段返回的值;
  • 为特定用途定义字段而不修改底层 mapping;

运行时字段的好处: 因为运行时字段没有索引,所以添加运行时字段不会增加索引大小。 你直接在索引映射中定义运行时字段,从而节省存储成本并提高摄取速度。 当你定义一个运行时字段时,你可以立即在搜索请求、聚合、过滤和排序中使用它,而无需额外重新索引你的数据。

运行时字段的缺点: 每次你对运行时字段运行搜索时,Elasticsearch 都必须再次评估该字段的值,因为它不是你文档中被索引的真实字段。 如果此字段是你打算在将来经常查询的字段,那么你应该考虑将其提取为摄取管道的一部分。

更多参考:
ES Doc - runtime
Elasticsearch:Runtime fields 及其应用(一)
Elasticsearch:Runtime fields 及其应用(二)


五、映射类型(Field data types)

下一篇文章会讲映射类型及相关测试。


六、元数据字段(Metadata fields)

更新详细内容可参考:
Elasticsearch:Metadata fields - 元数据字段介绍
Elastic Docs › Elasticsearch Guide [8.6] › Mapping › Metadata fields

  • _id:文档的 ID。
  • _index:文档所属的索引。
    文档源元数据字段
  • _source:表示文档正文的原始 JSON。
  • _size:_source 字段的大小(以字节为单位),由 mapper-size 插件提供。
  • _doc_count:当文档表示预聚合(pre-aggregation)数据时,用于存储文档计数的自定义字段。
  • _field_names:档中包含非空值的所有字段。
  • _ignored:由于 ignore_malformed 而在索引时被忽略的文档中的所有字段。
  • _routing: 将文档路由到特定分片的自定义路由值。
  • _meta:应用程序特定的元数据,参考 Elasticsearch:添加 metadata 到 mapping 中。
  • _tier:文档所属索引的当前数据层首选项。
分类字段
身份元数据字段_id_index
文档源元数据字段_source_size
文档计数元数据字段_doc_count
索引元数据字段_field_names、_ignored
路由元数据字段_routing
其它元数据字段_meta_tier

七、映射参数(Mapping parameters)

详细内容请参考:Elastic Docs › Elasticsearch Guide [8.6] › Mapping › Mapping parameters

以下映射参数是某些或所有字段数据类型的通用参数:

  • index:控制是否对字段值建立索引。接受 true 或 false 值,默认 true 值;未索引的字段不能通过检索查询到数据。

  • store:标记字段是否需要被 额外的 单独的 存储在和 index 不同的 fragment 中。接受 yes/no 和 true/false 值,默认为 no/false 值,即不单独存储。

    • 默认情况下,文档添加到索引后是不需要再单独储存的,因为 _source 默认已经存储了整个原始文档,而默认情况下,提取出来的字段值也是从 _source 中解析出来的。
    • 字段开启独立存储时,需要占用额外的磁盘空间,独立的字段越多,索引就越大,但在单独获取一个被独立 store 的字段值时,要比从 _source 中解析要快。
    • 提取数据时,每一个被 store 独立存储的字段,都需要一次单独的 IO 从对应的存储块中获取;而未被 store 标记的其他的字段,则只需要一次 IO 即可从 _source 中全部获取。
    • 文档被添加到索引后可被查询检索,文档被指定到存储后可被返回显示,因而,常规情况下,需要返回原始值的字段至少保证 store 或 _source 中有存储。
  • analyzer:用于指定text文本字段在创建文档索引或查询检索文档时使用的文本分析器;仅支持text字段使用,除非被 search_analyzer 参数覆盖,否则将同时应用于索引和搜索。

  • search_analyzer:指定查询搜索文档时对查询条件使用的分析器。默认情况下,查询条件将使用被查询字段 analyzer 参数定义的索引分析器,但是可以通过此参数设置覆盖。

  • boost:在索引期间指定字段在查询时的相关性得分(不推荐);也可以直接在查询时指定。

  • format :自定义日期的解析格式。在JSON文档中,日期表示为字符串,在ES中预配置了一组格式来识别这些字符串并将其解析为一个long类型的毫秒数。

  • fields:为不同的目的以不同的方式对同一字段建立索引,这就是多字段的目的。多字段不会更改原始 _source 字段。

  • null_value:一个空的值不能被索引或搜索,参数用于将显式的空(null)值替换为指定的值。

  • meta:附加到字段的元数据。只对在相同索引上工作的多个应用程序有用,以共享关于字段(如单位)的元信息;可以通过提交映射更新进行更新。


八、映射限制设置(Mapping limit settings)

使用以下设置限制字段映射的数量(手动或动态创建),并防止文档导致映射爆炸:

  • index.mapping.total_fields.limit:索引中的最大字段数。字段和对象映射以及字段别名都属于此限制。映射的运行时字段也计算到此限制。默认值为1000。

    该限制已到位,以防止映射和搜索变得太大。较高的值可能会导致性能下降和内存问题,特别是在负载高或资源少的集群中。

    如果增加此设置,我们建议您也增加 indices.query.bool.max_clause_count 设置,该设置限制查询中子句的最大数量。

    如果字段映射包含一组大的任意键,请考虑使用 扁平数据类型。

  • index.mapping.depth.limit:字段的最大深度,以内部对象的数量度量。例如,如果所有字段都在根对象级别定义,则深度为1。如果有一个对象映射,则深度为2等。默认值为20。

  • index.mapping.nested_fields.limit:索引中不同嵌套映射的最大数量。嵌套类型只能在特殊情况下使用,当需要独立查询对象数组时。为了防止设计不良的映射,此设置限制了每个索引的唯一嵌套类型的数量。默认值为50。

  • index.mapping.nested_objects.limit:单个文档在所有嵌套类型中可以包含的最大嵌套JSON对象数。当文档包含太多嵌套对象时,此限制有助于防止内存不足错误。默认值为 10000

  • index.mapping.field_name_length.limit:字段名称的最大长度设置。这个设置并不能解决映射爆炸的问题,但如果您想限制字段长度,它可能仍然有用。通常不需要设置此设置。默认值是可以的,除非用户开始添加大量具有真正长名称的字段。默认值为Long.MAX_VALUE(无限制)。

  • index.mapping.dimension_fields.limit:[预览]此功能处于技术预览中,可能会在将来的版本中更改或删除。Elastic将尽最大努力解决任何问题,但技术预览中的功能不受正式GA功能支持SLA的约束。(dynamic,integer)索引的最大 时间序列维度数。默认值为16。

相关文章:

ElasticSearch 基础(五)之 映射

目录前言一、映射&#xff08;Mapping&#xff09;简介二、动态映射&#xff08;Dynamic mapping&#xff09;1、动态字段映射1.1、日期检测1.1.1、禁用日期检测1.1.2、自定义检测到的日期格式1.2、数值检测2、动态模板三、显示映射&#xff08;Explicit mapping&#xff09;1、…...

【C语言督学训练营 第二天】C语言中的数据类型及标准输入输出

文章目录一、前言二、数据类型1.基本数据类型①.整形②.浮点型③.字符型2.高级数据类型3.数据分类①.常量②.变量三、标准输入输出1.scanf2.printf四、进制转换1.进制转换简介2.十进制转其他进制3.其他进制转换五、OJ网站的使用一、前言 王道2024考研408C语言督学营第二天&…...

重资产模式和物流网络将推动京东第四季度利润率增长

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 强劲的2022年第三季度财务业绩 2022年11月18日&#xff0c;京东&#xff08;JD&#xff09;公布了2022年第三季度财务业绩&#xff0c;净收入为2435亿元人民币&#xff0c;增长了11.4%。净服务收入为465亿元人民币&#xf…...

【新】EOS至MES的假捻报工数据导入-V2.0版本

假捻自动线的数据和MES没有进行对接,直接入库至EOS。 因此可信平台上缺少这部分的报工数据,需要把EOS的入库数据导出,整理成报工数据,导入到MES,然后通过定时任务集成到可信平台。 MES这边的报工数据整理,主要是添加订单明细ID,和完工单号。 订单明细ID(根据批次号和…...

python甜橙歌曲音乐网站平台源码

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python音乐 获取完整源码源文件说明文档配置教程等 在虚拟环境下输入命令“python manage.py runserver”启动项目&#xff0c;启动成功后&#xff0c;访问“http://127.0.0.1:5000”进入甜橙音乐网首页&#xff0c;如图1所…...

docker imageID计算

Image ID是在本地由Docker根据镜像的描述文件计算的&#xff0c;并用于imagedb的目录名称 docker镜像id都保存在/var/lib/docker/image/overlay2/imagedb/content/sha256下面&#xff0c;都是一些以sha256sum计算文件内容得出的哈希值的文件。 #ls /var/lib/docker/image/ove…...

借助媛如意让ROS机器人turtlesim画出美丽的曲线-云课版本

首先安装并打开猿如意其次打开蓝桥云课ROS并加入课程在猿如意输入问题得到答案在蓝桥云课ROS验证如何通过turtlesim入门ROS机器人您可以通过以下步骤入门ROS机器人&#xff1a;安装ROS&#xff1a;您需要安装ROS&#xff0c;可以在ROS官网上找到安装指南。安装turtlesim&#x…...

小区业主入户安检小程序开发

小区业主入户安检小程序开发 可针对不同行业自定义安检项目&#xff0c;线下安检&#xff0c;线上留存&#xff08;安检拍照/录像&#xff09;&#xff0c;提高安检人员安检效率 功能特性&#xff0c;为你介绍小区入户安检系统的功能特性。 小区管理;后台可添加需要安检的小区…...

【C++知识点】异常处理

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;C/C知识点 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;…...

【FATE联邦学习debug】 No module named ‘federatedml‘

直接pip install federatedml是无法找得到这个库的。 这个的原因是环境变量的事情&#xff0c;因为在部署文档中&#xff0c;本身提示我们要更新一些环境变量&#xff0c;如果不export那些变量&#xff0c;下面的fate_test其实也是无法测试成功的。 打开bin/init_env.sh&#x…...

【Git】P1 Git 基础

Git 基础Git 基本概念集中式版本控制工具 与 分布式版本控制工具Git 下载与安装Bash 初始设置创建本地仓库Git 三区概念一个简单的提交流程更改文件后再次提交git 实现版本切换查看提交日志设置 git 快捷键版本切换&#xff08;一&#xff09;版本切换&#xff08;二&#xff0…...

智能交通数据集Rope3D(仅限科研使用)

Rope3D Dataset 官网&#xff1a;https://thudair.baai.ac.cn/index &#xff01;&#xff01;&#xff01;如想要使用Rope3D数据集进行2D检测&#xff0c;最后有我们处理完的数据集链接。 &#xff01;&#xff01;&#xff01; 介绍&#xff1a; DAIR-V2X数据集是首个用于…...

Java虚拟机JVM-面试题

1、Java 虚拟机是如何捕获异常的&#xff1f; 答&#xff1a; 在编译生成的字节码中&#xff0c;每个方法都附带一个异常表。异常表中的每一个条目代表一个异常处理器&#xff0c;并且由 from 指针、to 指针、target 指针以及所捕获的异常类型构成。这些指针的值是字节码索引…...

详细的说说Redis的数据类型

Redis是一个开源的内存数据库&#xff0c;它可以用作缓存、消息代理、实时数据处理和许多其他用途。Redis是一个key-value存储系统&#xff0c;其中数据存储在内存中&#xff0c;并通过网络进行访问。与传统的关系型数据库不同&#xff0c;Redis支持多种数据结构&#xff0c;包…...

798.差分矩阵

输入一个 n行 m列的整数矩阵&#xff0c;再输入 q个操作&#xff0c;每个操作包含五个整数 x1,y1,x2,y2,c&#xff0c;其中 (x1,y1)和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上 c。 请你将进行完所有操作后的矩阵输出…...

InfluxDB 2 介绍与使用 flux查询 数据可视化

一、关键概念 相比V1 移除了database 和 RP&#xff0c;增加了bucket。 V2具有以下几个概念&#xff1a; timestamp、field key、field value、field set、tag key、tag value、tag set、measurement、series、point、bucket、bucket schema、organization 新增的概念&…...

Qt QTreeView简单使用

QT-QTreeView使用方法 QTreeView: 用于显示树状结构数据&#xff0c;适用于树状结构数据的操作。 一、初始化 ​ 利用QStandardlternModel来初始化数据&#xff0c;标准的基于项数据的数据模型类&#xff0c; 每个项数据可以是任何数据类型。 // 初始化model QStandardItem…...

Wannacrypt蠕虫老树开花?又见Wannacrypt

Wannacrypt蠕虫是一个在2017年就出现的远古毒株&#xff0c;其利用永恒之蓝漏洞降维打击用户服务器&#xff0c;而后进行扩散勒索&#xff0c;曾经一度风靡全球&#xff0c;可谓是闻者伤心&#xff0c;听着落泪&#xff0c;因为这玩意解密是不可能 解密的。 而2023年的今天&am…...

结合基于规则和机器学习的方法构建强大的混合系统

经过这些年的发展&#xff0c;我们都确信ML即使不能表现得更好&#xff0c;至少也可以在几乎所有地方与前ML时代的解决方案相匹配。比如说一些规则约束&#xff0c;我们都会想到能否把它们替换为基于树的ml模型。但是世界并不总是黑白分明的&#xff0c;虽然机器学习在解决问题…...

Spring Security OAuth2实现多用户类型认证、刷新Token

原本的OAuth2登录支持用户名密码登录&#xff0c;现在还想支持另外用id号码和密码登录。但是OAuth2默认提供的UserDetailsService只允许传入一个参数&#xff1a;想要实现多种用户登录&#xff0c;是不是可以考虑loadUserByUsername方法携带多个参数呢&#xff1f;接下来记录一…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...