微服务-Elasticsearch基础篇【内含思维导图】

news2024/12/23 10:39:12

Elasticsearch官网:欢迎来到 Elastic — Elasticsearch 和 Kibana 的开发者 | Elastic

注意:Elasticsearch官网访问和加载的耗时很长!!!

Lucene官网:Apache Lucene - Welcome to Apache Lucene


目录

一、Elasticsearch入门

1. Elasticsearch介绍

2. Lucene介绍

3. 什么是Elasticsearch

4. 什么是elastic stack(ELK)?

5. 什么是Lucene?

6. 面试题

        关于“谈谈你对 ES 的理解” 

二、正向索引和倒排索引

1. 什么是正向索引

2. 倒排索引

2.1 什么是倒排索引

2.2 倒排索引相关概念

2.3 如何创建倒排索引

2.4 倒排索引的搜索流程

3. 正向索引和倒排索引

三、Elasticsearch基本概念

1.什么是文档(Document)

2. 什么是字段(Field)

3. 什么是索引(Index)

4. 什么是映射(mapping)

5. Elasticsearch和MySQL的对比

四、Elasticsearch的安装

五、索引库操作

思维导图

1.mapping属性

2. 创建索引

2.1 基本语法

2.2 使用格式

2.3 使用实例

3. 查询索引

3.1 基本语法

3.2 使用格式

3.3 使用实例

4. 添加新的字段到mapping

4.1 基本语法

4.2 使用格式

4.3 使用实例

5. 删除索引库 

5.1 基本语法

5.2 使用格式

5.3 使用实例

六、文档操作

思维导图

1. 添加文档

1.1 基本语法

1.2 使用格式

1.3 使用实例

2. 查询文档

1.1 基本语法

3. 删除文档

1.1 基本语法

1.2 使用格式

1.3 使用实例

4.修改文档

4.1 全量修改

4.1.1 全量修改是什么

4.1.2 基本语法

4.1.3 使用格式

4.1.4 使用实例

4.2 增量修改 

4.2.1 增量修改是什么

4.2.2 基本语法

4.2.3 使用格式

4.2.4 使用实例

七、 高级查询

思维导图

1. 查询的基本语法:

2. 查询所有

1. 基本语法

2. 使用格式

3. 使用实例

3. 全文检索

1. 基本语法

2. 使用格式

match

multi_match

3. 使用实例

4. 精准查询

1. 基本语法

2. 使用格式

term查询

range查询

3. 使用实例

5. 过滤查询

1. 基本语法

2. 使用格式

3. 使用实例

6. 排序查询

1. 基本语法

2. 使用格式

3. 使用实例

7. 分页查询

1. 基本语法

2. 使用格式

3. 使用实例

8. 高亮查询

1. 基本语法

2. 使用格式

3. 使用实例

9. 聚合查询

1. 使用格式

2. 使用实例


一、Elasticsearch入门

1. Elasticsearch介绍

【摘自百度百科】    

        Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。
        Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。
        Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。
        Elasticsearch使用Lucene,并试图通过JSON和Java API提供其所有特性。它支持facetting和percolating,如果新文档与注册查询匹配,这对于通知非常有用。另一个特性称为“网关”,处理索引的长期持久性;例如,在服务器崩溃的情况下,可以从网关恢复索引。Elasticsearch支持实时GET请求,适合作为NoSQL数据存储,但缺少分布式事务。


2. Lucene介绍

摘自百度百科】        

        Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。


3. 什么是Elasticsearch

        一个开源分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能,帮助我们从海量数据中快速找到需要的内容。


4. 什么是elastic stack(ELK)?

        是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch

        被广泛应用在日志数据分析、实时监控等领域。

5. 什么是Lucene?

        Lucene是Apache的开源搜索引擎类库提供了搜索引擎的核心API

        Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。

6. 面试题

        关于“谈谈你对 ES 的理解” 

        Elasticsearch ,简称 ES 。它是建立在全文搜索引擎库 Apache Lucene 基础之上的
一个开源的搜索引擎,也可以作为 NoSQL 数据库,存储任意格式的文档和数据。也可
以做大数据的分析,是一个跨界开源产品。
它最主要的应用场景是 ELK 的日志分析系统。
另外它还有以下特点:
1. 第一、采用 Master-slave 架构,实现数据的分片和备份
2. 第二、使用 Java 编写,并对 Lucene 进行封装,隐藏了 Lucene 的复杂性
3. 第三、能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
4. 第四、ES 提供的 Restful API,不仅简化了 ES 的操作,还支持任何语言的客户端
提供 API 接口,另外 Restful API 的风格还实现了 CURD 操作、创建索引,删除索
引等功能。

二、正向索引和倒排索引

1. 什么是正向索引

        正向索引是最传统的根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。

        正向索引是以关键字为主码,查询时需要遍历每一个文件。每个文件都对应一个文件ID,文件内容被表示为一串关键词的集合。实际上在搜索引擎索引库中,关键词也已经转换为关键词ID。

        举例:传统数据库(如MySQL)采用正向索引

如果是根据id查询,那么直接走索引,查询速度非常快。


2. 倒排索引

2.1 什么是倒排索引

【摘自百度百科】

        倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)


2.2 倒排索引相关概念

文档(Document):用来搜索的数据,其中的每一条数据就是一个文档

词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语


2.3 如何创建倒排索引

        创建倒排索引是对正向索引的一种特殊处理,

  • 将每一个文档的数据利用算法分词,得到一个个词条

  • 创建表,每行数据包括词条、词条所在文档id、位置等信息

  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引


2.4 倒排索引的搜索流程

        倒排索引的搜索流程如下(以搜索"华为手机"为例):

  1. 用户输入条件"华为手机"进行搜索。
  2. 对用户输入内容分词,得到词条:华为手机
  3. 拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。
  4. 拿着文档id到正向索引中查找具体文档


3. 正向索引和倒排索引

正向索引:

  • 优点:

    • 可以给多个字段创建索引

    • 根据索引字段搜索、排序速度非常快

  • 缺点:

    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描

倒排索引:

  • 优点:

    • 根据词条搜索、模糊搜索时,速度非常快

  • 缺点:

    • 只能给词条创建索引,而不是字段

    • 无法根据字段做排序


三、Elasticsearch基本概念

1.什么是文档(Document)

        一条数据就是一个文档,在Elasticsearch中是按照Json格式存放

2. 什么是字段(Field)

        Json文档中的字段

3. 什么是索引(Index)

        通类型文档的集合 

4. 什么是映射(mapping)

        索引中文档的约束,比如:字段名称、类型

5. Elasticsearch和MySQL的对比

MySQLElasticsearch说明
TableIndex索引(index),就是文档的集合,类似数据库的表(table)
RowDocument文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
ColumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
SchemaMappingMapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)
SQLDSLDSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

四、Elasticsearch的安装

本章主要介绍了  基于Docker安装Elasticsearch、Kibana、IK分词器

        请跳转我的另外一篇博客文章:

基于Docker安装Elasticsearch【保姆级教程、内含图解】_elasticsearch docker 安装_Acloasia的博客-CSDN博客


五、索引库操作

思维导图

1.mapping属性

mapping是对索引库中文档的约束,常见的mapping属性包括:

  • type:字段数据类型,常见的简单类型有:
    • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
    • 数值:long、integer、short、byte、double、float、
    • 布尔:boolean
    • 日期:date
    • 对象:object
  • index:是否创建索引,默认为true
  • analyzer:使用哪种分词器、
    • 默认的是standard分词器
    • 有两种分词模式:
      • ik_smart:最少切分,粗粒度
      • ik_max_word:最细切分,细粒度
  • properties:该字段的子字段

举例:


2. 创建索引

        倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引。
        注意: 因此索引库一旦创建,无法修改mapping!!!

2.1 基本语法

注意:索引库,不可使用大写的英文

PUT /索引库名

2.2 使用格式

PUT /索引库名称
{
  "mappings": {
     "properties": {
        "字段名":{
          "type": "text",
          "analyzer": "ik_smart"
        },
        "字段名2":{
          "type": "keyword",
          "index": "false"
        },
        "字段名3":{
          "properties": {
             "子字段": {
               "type": "keyword"
             }
           }
        },
     // ...略
    }
  } 
}

2.3 使用实例

PUT /myesdemo
{
  "mappings": {
    "properties":{
      "age":{
        "type":"integer",
        "index":true
      },
      "weight":{
        "type":"boolean"
      },
      "isMarried":{
        "type":"boolean"
      },
      "info":{
        "type":"text",
        "analyzer":"ik_smart"
      },
      "eamil":{
        "type":"keyword",
        "index":false
      },
      "score":{
        "type":"float"
      },
      "name":{
        "properties":{
          "firstName":{
            "type":"keyword"
          },
          "lastName":{
            "type":"keyword"
          }
        }
      }
    }
  }
}


3. 查询索引

3.1 基本语法

  • 请求方式: GET
  • 请求路径:/ 索引库名
  • 请求参数:无

3.2 使用格式

GET /索引库名

3.3 使用实例

GET /myesdemo

输出

{
  "myesdemo": {
    "aliases": {},
    "mappings": {
      "properties": {
        "age": {
          "type": "integer"
        },
        "eamil": {
          "type": "keyword",
          "index": false
        },
        "info": {
          "type": "text",
          "analyzer": "ik_smart"
        },
        "isMarried": {
          "type": "boolean"
        },
        "name": {
          "properties": {
            "firstName": {
              "type": "keyword"
            },
            "lastName": {
              "type": "keyword"
            }
          }
        },
        "score": {
          "type": "float"
        },
        "weight": {
          "type": "boolean"
        }
      }
    },
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "1",
        "provided_name": "myesdemo",
        "creation_date": "1685289278555",
        "number_of_replicas": "1",
        "uuid": "rlCb-2bpQuKUdnwJCTH5fQ",
        "version": {
          "created": "8060099"
        }
      }
    }
  }
}


4. 添加新的字段到mapping

        前言有提到索引库一旦创建,无法修改mapping

        但可以在已经创建的索引库,进行添加新的字段。

4.1 基本语法

  • 请求方式: PUT
  • 请求路径:/ 索引库名 /_mapping
  • 请求参数:无

4.2 使用格式

PUT /myesdemo/_mapping
{
  "properties":{
    "全新字段名":{
      "type":"keyword",
      "index":false
       // .... 略
    }
  }
}

4.3 使用实例

PUT /myesdemo/_mapping
{
  "properties":{
    "gender":{
      "type":"keyword",
      "index":false
    }
  }
}


5. 删除索引库 

5.1 基本语法

  • 请求方式: DELETE
  • 请求路径:/ 索引库名
  • 请求参数:无

5.2 使用格式

DELETE /索引库名

5.3 使用实例

DELETE /myesdemo


六、文档操作

思维导图

1. 添加文档

1.1 基本语法

         没有指定文档的id,在 ES 中会自动给我们生成一个随机的文档 id 值。
  • 请求方式:POST
  • 请求路径:/索引库名/_doc/文档id
  • 请求参数:无

1.2 使用格式

POST /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    "字段3": {
        "子属性1": "值3",
        "子属性2": "值4"
    },
    // ...
}

1.3 使用实例

#创建一个索引库
PUT /mydemo
{
  "mappings": {
    "properties":{
      "age":{
        "type":"integer",
        "index":true
      },
      "eamil":{
        "type":"keyword",
        "index":false
      },
      "id":{
        "type":"integer"
      },
      "score":{
        "type":"float"
      },
      "name":{
        "type":"text",
        "analyzer": "ik_smart"
        }
    }
  }
}
#向mydemo索引库,新镇文档
POST /mydemo/_doc/1
{
  "age":18,
  "name":"李华华",
  "email":"XXX@xxx.com",
  "id":"1",
  "score":"99"
}

2. 查询文档

1.1 基本语法

  • 请求方式: GET
  • 请求路径:/{ 索引库名 }/_doc/{id}
  • 请求参数:文档ID

1.2 使用格式

GET /{索引库名称}/_doc/{id}

1.3 使用实例

#查询文档
GET /mydemo/_doc/1

3. 删除文档

1.1 基本语法

  • 请求方式: DELETE
  • 请求路径:/{ 索引库名 }/_doc/{id}
  • 请求参数:文档ID

1.2 使用格式

DELETE /{索引库名}/_doc/id值

1.3 使用实例

#删除文档
DELETE /mydemo/_doc/1

4.修改文档

4.1 全量修改

4.1.1 全量修改是什么

        删除旧文档,添加新文档

4.1.2 基本语法

  • 请求方式: PUT
  • 请求路径:/{ 索引库名 }/_doc/{id}
  • 请求参数:文档ID

4.1.3 使用格式

PUT /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    // ... 略
}

4.1.4 使用实例

#全量修改,删除旧文档,添加新文档
PUT /mydemo/_doc/1
{
  "age":19,
  "name":"张三",
  "email":"XXX@xxx.com",
  "id":"2",
  "score":"100"
}

4.2 增量修改 

4.2.1 增量修改是什么

        只修改指定id匹配的文档中的指定字段值

4.2.2 基本语法

  • 请求方式:POST
  • 请求路径:/{ 索引库名 }/_pudate/{id}
  • 请求参数:文档ID

4.2.3 使用格式

POST /{索引库名}/_update/文档id
{
    "doc": {
         "字段名": "新的值",
    }
}

4.2.4 使用实例

#增量修改,只修改指定id匹配的文档中的指定字段值
POST /mydemo/_update/1
{
  "doc":{
    "name":"李四"
  }
}


七、 高级查询

思维导图

        ES 提供了基于 JSON DSLDomain Specific Language)来定义查询。 

1. 查询的基本语法:

GET /索引名称/_search
{
    "query": {
    "查询类型": {
        "查询条件": "条件值"
        }
    }
}

2. 查询所有

1. 基本语法

  • 请求方式:GET
  • 请求路径:/{ 索引库名 }/_search
  • 请求参数:无

2. 使用格式

GET /索引名称/_search
{
    "query": {
    "match_all": {}
    }
}

3. 使用实例

#查询所有
GET /mydemo/_search
{
  "query":{
    "match_all":{}
  }
}

3. 全文检索

全文检索查询的基本流程如下:
  1. 对用户搜索的内容做分词,得到词条 
  2. 根据词条去倒排索引库中匹配,得到文档id
  3. 根据文档id找到文档,返回给用户
比较常用的场景包括:
  • 商城的输入框搜索
  • 百度输入框搜索

1. 基本语法

  • match:单字段查询
  • multi_match:多字段查询,任意一个字段符合条件就算符合查询条件

2. 使用格式

match

GET /索引名称/_search
{
  "query":{
    "match": {
      "FIELD": "TEXT"
    }
  }
}

multi_match

在 multi_match 的参数中,query 表示要查询的字段值,而 fields 表示在那些字段中查询。

GET /索引名称/_search
{
  "query":{
    "multi_match": {
      "query":"查询值",
      "fields":["查询条件1","查询条件2",...]
    }
  }
}

3. 使用实例

#全文检索
GET /mydemo/_search
{
  "query":{
    "match": {
      "age": "19"
    }
  }
}
GET /mydemo/_search
{
  "query":{
    "multi_match": {
      "query":"张飞",
      "fields":["name","email"]
    }
  }
}

4. 精准查询

        精确查询一般是查找keyword 、数值、日期、 boolean 等类型字段。所以 不会 对搜索条件分词。

1. 基本语法

  • term:根据词条精确值查询
  • range:根据值的范围查询

2. 使用格式

term查询

#term查询
GET /索引名称/_search
{
  "query":{
    "term": {
      "FIELD": {
        "value": "VALUE"
      }
    }
  }
}

range查询

##range查询
#这里的gte代表大于等于,gt则代表大于
#lte代表小于等于,lt则代表小于
GET /索引名称/_search
{
  "query":{
    "range": {
      "FIELD": {
        "gte": "VALUE",
        "lte": "VALUE"
      }
    }
  }
}

3. 使用实例

###精确查询
##term查询
GET /mydemo/_search
{
  "query":{
    "term": {
      "age": {
        "value": "19"
      }
    }
  }
}
##range查询
#这里的gte代表大于等于,gt则代表大于
#lte代表小于等于,lt则代表小于
GET /mydemo/_search
{
  "query":{
    "range": {
      "age": {
        "gte": "18", 
        "lte": "19" 
        }
      }
    }
  }
}

5. 过滤查询

        布尔查询是一个或多个查询子句的组合,每一个子句就是一个 子查询

1. 基本语法

  • must :必须匹配每个子查询,类似
  • should:选择性匹配子查询,类似
  • must_not:必须不匹配, 不参与算分 ,类似
  • filter:必须匹配, 不参与算分

2. 使用格式

#过滤查询
GET /索引名称/_search
{
  "query":{
    "bool": {
      "must": [
        {"term": {
          "FIELD": {
            "value": "VALUE"
          }
        }}
      ],
      "should": [
        {"term": {
          "FIELD": {
            "value": "VALUE"
          }
        }}
      ],
      "must_not": [
        {"term": {
          "FIELD": {
            "value": "VALUE"
          }
        }}
      ],
      "filter": [
        {"term": {
          "FIELD": "VALUE"
        }}
      ]
    }
  }
}

3. 使用实例

#过滤查询
GET /mydemo/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "age": {
            "value": "19"
          }
        }}
      ],
      "should": [
        {"term": {
          "eamil": {
            "value": "重庆"
          }
        }}
      ]
    }
  }
}

6. 排序查询

ES 默认是根据相关度算分( _score )来排序,但是也支持自定义方式对搜索 结果排序

1. 基本语法

  • 请求方式:GET
  • 请求路径:/{ 索引库名 }/_search
  • 请求参数:无

2. 使用格式

#排序查询 
#排序字段、排序方式
#ASC 升序排列
#DESC 降序排列
GET /索引名称/_search
{
  "query":{
    "match_all": {}
    },
    "sort": [
      {
        "FIELD": {
          "order": "排序方式"
        }
      }
    ]
  }
}

3. 使用实例

#排序查询
GET /mydemo/_search
{
  "query":{
    "match_all": {}
    },
    "sort": [
      {
        "age": {
          "order": "asc"
        }
      }
    ]
  }
}

7. 分页查询

         ES 默认情况下只返回top10的数据
        如果要查询更多数据就需要修改分页参数了。ES 中通过修改from size 参数来控制要返回的分页结果
        
         注意:当查询分页深度较大时,汇总数据过多,对内存和CPU会产生非常大的压力,因此 ES 会禁止 from+ size 超过10000 的请求。 (面试高频点)

1. 基本语法

  • from :从第几个文档开始
  • size:总共查询几个文档

2. 使用格式

GET /索引名称/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 20,
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

3. 使用实例

#分页查询
GET /mydemo/_search
{
  "query":{
    "match_all": {}
  },
  "from": 0,
  "size": 20, 
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

8. 高亮查询

        注意: 高亮查询只能针对字段类型为 Text 的 ,不能是别的类型。默认会自动加上 <em>
</em> ,如果希望修改,可以在字段中指定。

1. 基本语法

高亮显示的实现分为两步:
  1. 给文档中的所有关键字都添加一个标签,例如 <em> 标签
  2. 页面给 <em> 标签编写CSS样式

2. 使用格式

GET /索引名称/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  },
  "highlight": {
    "fields": {
      "FIELD":{
        "pre_tags": "<em>",
        "post_tags": "<em>"
      }
    }
  }
}

3. 使用实例

#高亮查询
GET /mydemo/_search
{
  "query": {
    "match": {
      "name": "张飞"
    }
  },
  "highlight": {
    "fields": {
      "name":{
        
      }
    }
  }
}

9. 聚合查询

1. 使用格式

#聚合函数
GET /索引名称/_search
{
  "size":0,
  "aggs": {
    "NAME": {
      "AGG_TYPE": {}
    }
  }
}

2. 使用实例

GET /mydemo/_search
{
  "size": 0,
  "aggs": {
    "aggName": {
      "terms": {
        "field": "age",
        "size": 10
      }
    }
  }
}

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

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

相关文章

Docker基本操作与自定义镜像Docker-Compose与Docker镜像仓库

目录 一.基本操作 1.镜像操作 1.1.镜像名称 1.2.镜像命令 1.3.案例-拉取、查看镜像 1.4.案例-保存、导入镜像 2.容器操作 2.1.容器相关命令 2.2.案例-创建并运行一个容器 2.3.案例-进入容器&#xff0c;修改文件 2.4.小结 3.数据卷&#xff08;容器数据管理&#x…

挑选在线帮助文档协作工具的技巧与要点

随着互联网的发展&#xff0c;越来越多的公司和团队开始使用在线帮助文档协作工具来共同编辑和维护文档。这些工具可以让多个用户同时协作编辑同一篇文档&#xff0c;从而提高工作效率和减少沟通成本。然而&#xff0c;在选择在线帮助文档协作工具时&#xff0c;需要注意一些技…

低代码平台投票榜揭晓:这些平台最受欢迎

低代码平台是软件开发工具&#xff0c;允许用户快速轻松地创建和部署应用程序&#xff0c;只需最少的编程知识。对于寻求在不需要大量IT资源的情况下构建自定义应用程序的企业来说&#xff0c;这些平台非常有用。在本文中&#xff0c;我们将讨论低代码平台排行榜投票榜&#xf…

注解和反射复习

注解 注解&#xff1a;给程序和人看的&#xff0c;被程序读取&#xff0c;jdk5.0引用 内置注解 override:修饰方法&#xff0c;方法声明和重写父类方法&#xff0c; Deprecated:修饰&#xff0c;不推荐使用 suppressWarnings用来抑制编译时的警告,必须添加一个或多个参数s…

外贸客户背调的几种干货技巧

外贸人要想做到知己知彼&#xff0c;那背调是必不可少的。 有经验的外贸人会通过关键词、邮箱等开展模糊搜索&#xff0c;然而这种方式不光效率低&#xff0c;而且搜索到的信息也不全。今天小编分享的这几种背调组合工具&#xff0c;不光收集到的客户信息全面&#xff0c;而且…

Nginx网络服务的配置(叫不醒和睡不着的是两个世界)

文章目录 一、Nginx概述二、Nginx相对于Apache的优点三、配置Nginx网络服务1.编译安装和启用Nginx服务&#xff08;1&#xff09;关闭防火墙和selinux&#xff08;2&#xff09;安装依赖包&#xff08;3&#xff09;创建运行用户、组&#xff08;Nginx 服务程序默认以 nobody 身…

华为OD机试真题B卷 Java 实现【机房布局】,附详细解题思路

一、题目描述 小明正在规划一个大型数据中心机房&#xff0c;为了使得机柜上的机器都能正常满负荷工作&#xff0c;需要确保在每个机柜边上至少要有一个电箱。 为了简化题目&#xff0c;假设这个机房是一整排&#xff0c;M表示机柜&#xff0c;I表示间隔&#xff0c;请你返回…

北斗RTK差分定位技术原理、优势及应用领域

北斗卫星导航系统是中国自主建设的卫星导航系统&#xff0c;是继美国GPS、俄罗斯GLONASS和欧盟Galileo之后&#xff0c;全球第四个卫星导航系统。北斗系统非常重要&#xff0c;可用于国防、公共安全、民生等多个领域&#xff0c;包括交通运输、环境保护、渔业等。差分定位则是北…

【Springboot系列】springboot扩展点大整理,赶紧收藏起来

系列文章&#xff1a;Spring Boot学习大纲&#xff0c;可以留言自己想了解的技术点 1、aware系列 在Spring Boot中&#xff0c;有一些可以实现的Aware接口&#xff0c;用于在应用程序中获取特定的上下文或对象。这些接口允许您的组件意识到它们所在的环境&#xff0c;并与之进…

和数集团元宇宙场景落地 催生新机遇

现代社会随着科技不断发展&#xff0c;人们对于虚拟现实的需求日益提高。随着互联网进入Web3.0时代&#xff0c;越来越多的人开始进入虚拟世界&#xff0c;探索虚拟现实的无限可能。 在这个充满未知的广阔世界中&#xff0c;和数集团旗下包括【神念无界源起山海】、【神宠岛】…

国内使用chatGPT插件

无需任何繁琐操作&#xff0c;只要你一打开edge浏览器就能使用chatGPT&#xff0c;还要什么自行车&#xff01; 那么如何使用呢&#xff1f;其实操作是非常简单的&#xff01; 步骤 第一步&#xff1a;下载edge浏览器 edge浏览器一般Windows10系统都自带了&#xff0c;没有的…

ChatGPT 提示的艺术 —— 如何编写清晰有效提示指南

ChatGPT 提示的作用 正如我们之前提到的那样&#xff0c;ChatGPT 对话中使用的提示的质量可以显著影响对话的成功。定义清晰的提示可以确保对话保持在正确的轨道上&#xff0c;并涵盖用户感兴趣的主题&#xff0c;从而产生更引人入胜和信息丰富的体验。 那么什么样的 ChatGPT…

计算机网络实验:认识Packet Tracer软件

目录 前言实验目的实验内容及要求相关知识点实验指导实验过程总结 前言 计算机网络是当今信息技术的重要组成部分&#xff0c;它涉及到多种硬件和软件的协同工作&#xff0c;以实现数据的传输和交换。为了更好地理解和掌握计算机网络的基本原理和技术&#xff0c;我们需要进行…

关于分数的二进制原反补码的求解

话不多说&#xff0c;上例子 求-53/64的原反补&#xff1b; 前奏&#xff1a;-53/64可以分解为符号位“-”和数字位53/64&#xff1b; 第一步&#xff1a;在计算机中&#xff0c;符号位用0表示“”用1表示“-” 第二步&#xff1a;求53/64的二进制数&#xff0c;过程如下图…

如何回馈 Elastic 社区

作者&#xff1a;Ully Sampaio 在 Elastic 社区中拥有前排座位最美妙的事情之一就是见证人们互相帮助。 从讨论和 Elastic Community Slack 工作区到 Elastic YouTube 官方频道&#xff0c;无论你走到哪里&#xff0c;你都会看到 Elasticsearch 专家和初学者分享他们的知识。 这…

图解LeetCode——543. 二叉树的直径

一、题目 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 二、示例 2.1> 示例 1&#xff1a; 【输入】roo…

Vision Transformer (ViT)及各种变体

目录 0.Vision Transformer介绍 1.ViT 模型架构 1.1 Linear Projection of Flattened Patches 1.2 Transformer Encoder 1.3 MLP Head 1.4 ViT架构图 1.5 model scaling 2.Hybrid ViT 4.其他Vision Transformer变体 5.Vit代码 6.参考博文 0.Vision Transformer介绍 …

样本不平衡的解决办法

背景 Focal loss是最初由何恺明提出的&#xff0c;最初用于图像领域解决数据不平衡造成的模型性能问题。本文试图从交叉熵损失函数出发&#xff0c;分析数据不平衡问题&#xff0c;focal loss与交叉熵损失函数的对比&#xff0c;给出focal loss有效性的解释。 交叉熵损失函数…

危机先知:TOOM舆情监控助力风险预警

随着社交媒体和互联网的普及&#xff0c;公众的声音在网络上如洪水般涌现。这些声音传递着情绪、态度和观点&#xff0c;对个人、组织甚至整个社会产生着巨大影响。因此&#xff0c;舆情监控成为了一个不可或缺的工具&#xff0c;帮助企业和组织及时了解公众对其品牌、产品或服…

决策树基本理论知识

目录 1、决策树是一种树模型 2、决策树的训练与测试 3、信息增益&#xff08;ID3&#xff09; 3.1、衡量标准-熵 3.2、决策树构造实例 4、决策树算法 ​5、连续值离散化 6、预剪枝 1、决策树是一种树模型&#xff1a; &#xff08;1&#xff09;、从根结点开始一步步走…