elasticsearch 环境搭建和基本操作

参考资料

  • 适合后端编程人员的elasticsearch快速实战教程

  • ElasticSearch最新实战教程

  • ElasticSearch配套笔记

  • 自制搜索引擎

  • https://www.elastic.co/guide/en/elasticsearch/reference/7.17/setup.html

restful风格的api

REST 设计风格

例如以下springboot示例

@RestController
@RequestMapping("rest")
public class ResuFulController{
    @GetMapping("getOne/{id}/{name}")
    public User getOne(@PathVariable("id") String id, @PathVariable("name") String name){
        System.out.println("id: "+id);
        return new User("demo",12);
    }
}

REST:表现层状态转化(Representational State Transfer),如果一个架构符合REST原则,就称它为RESTful架构风格。

  • 资源:就是网络上的一个实体

  • 表现层:资源具体呈现出来的形式,叫做"表现层"(Representation)。

  • 状态转化:客户端想要操作服务器,必须通过某种手段让服务器端发生状态转化(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

REST原则就是指一个URL代表一个唯一资源,并且通过HTTP协议里面四个动词:GET、POST、PUT、DELETE对应四种服务器端的基本操作:

  • GET用来获取资源
  • POST用来添加资源(也可以用于更新资源)
  • PUT用来更新资源
  • DELETE用来删除资源

全文检索

全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置。当用户查询时根据建立的索引查找。

全文检索以文本作为检索对象,找出含有指定词汇的文本。全面、准确和快速是衡量全文检索系统的关键指标。

  • 只处理文本
  • 不处理语义
  • 搜索时英文不区分大小写
  • 结果列表有相关度排序

ElasticSearch简称ES,是基于Apache Lucenei构建的开源搜索引睾。Lucene本身就可以被认为迄今为止性能最好的一款开源搜索引擎工具包,但是lucene的PI相对复杂,需要深厚的搜索理论。ES是采用java语言编写,提供了简单易用的RestFul API,开发者可以使用其简单的RestFul API,开发相关的搜索功能,从而避免lucenel的复杂性。

ES主要以轻量级JSON作为数据存储格式,与MongoDB有点类似,但它在读写性能上优于MongoDB。同时也支持地理位置查询,还方便地理位置和文本混合查询。以及统计、日志类数据存储和分析、可视化

ES stack的安装

https://www.elastic.co/guide/en/elasticsearch/reference/8.6/setup.html

官方提供了不同的安装方式

  • 下载压缩包安装,windows的zip包
  • 包管理器安装
  • docker安装

需要提前配置好java环境

安装elasticsearch

使用rpm安装8.6.2版本的目录结构如下

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.6.2-x86_64.rpm
$ sudo rpm --install elasticsearch-8.6.2-x86_64.rpm
$ rpm -ql elasticsearch
/etc/elasticsearch
/etc/elasticsearch/elasticsearch-plugins.example.yml
/etc/elasticsearch/elasticsearch.yml
/etc/elasticsearch/jvm.options
/etc/elasticsearch/jvm.options.d
/etc/elasticsearch/log4j2.properties
/etc/elasticsearch/role_mapping.yml
/etc/elasticsearch/roles.yml
/etc/elasticsearch/users
/etc/elasticsearch/users_roles
/etc/sysconfig/elasticsearch
/usr/lib/sysctl.d/elasticsearch.conf
/usr/lib/systemd/system/elasticsearch.service
/usr/share/elasticsearch/bin
/usr/share/elasticsearch/bin/elasticsearch
...
/usr/share/elasticsearch/lib/...
/usr/share/elasticsearch/jdk/...
/usr/share/elasticsearch/modules/...
...
/usr/share/elasticsearch/plugins
/var/lib/elasticsearch
/var/log/elasticsearch

# 卸载
$ sudo rpm -e elasticsearch

目前es版本已经更新到7和8,和视频版本一致这里使用压缩包安装elasticsearch6.8.0版本

elasticsearch发行版本列表,https://www.elastic.co/cn/downloads/past-releases#elasticsearch

Elasticsearch 6.8.0,https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-0

注意:es无法在root用户下运行

解压和安装

tar -zxvf elasticsearch-6.8.0.tar.gz

目录结构,可见和rpm包的目录一致

- bin         可执行的二进制文件的目录
- config      配置文件的目录
- lib         运行时依赖的库
- logs        运行时日志文件
- modules	  运行时依赖的模块
- plugins     可以安装官方以及第三方插件

启动服务

./bin/elasticsearch

es并没有提供webui界面,测试启动返回json信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vOPxXnrT-1679215134302)(assets/image-20230319123324540.png)]

$ curl http://localhost:9200
{
  "name" : "9cWvHvU",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "TLtGg3X5QjiK4-5-7XVBMg",
  "version" : {
    "number" : "6.8.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "65b6179",
    "build_date" : "2019-05-15T20:06:13.172855Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

为了公开访问需要调整配置文件的监听端口为0.0.0.0

$ vim config/elasticsearch.yml
network.host: 0.0.0.0

生产环境的资源要求较高,重启可能会出现的报错如下

[1]: max file descriptiors [4096] for elasticsearch process is too low, increase to as least [65535]
[2]: max numer of threads [3082] for user [ec2-user] is too low, increase to as least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

错误1,修改配置文件,对当前登录的用户生效,重新登录使配置生效

$ sudo vim /etc/security/limits.conf
#This file sets the resource limits for the users logged in via PAM.
#It does not affect resource limits of the system services.
*               soft    nofile            65536
*               hard	nofile            65536
*               soft	nproc             4096
*               hard	nproc             4096

错误2,修改系统配置

$ sudo vim /etc/security/limits.d/20-nproc.conf
ec2-user soft nproc 4096

错误3,修改系统配置

$ sudo vim /etc/sysctl.conf
vm.max_map_count=655360
$ sudo sysctl -p
fs.inotify.max_user_watches = 524288
vm.max_map_count = 655360

测试远程访问

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J4AUXI1R-1679215134304)(assets/image-20230319125149742.png)]

安装kibana

安装步骤和elasticsearch相同,和es版本保持一致。感觉类似于grafana和prometheus的关系

下载地址,https://www.elastic.co/cn/downloads/past-releases/kibana-6-8-0

安装

tar -xzvf kibana-6.8.0-linux-x86_64.tar.gz

修改配置文件,指向es主机地址

$ vim kibana-6.8.0-linux-x86_64/config/kibana.yml
server.host: "0.0.0.0"                 		 # kibana服务器主机地址
elasticsearch.hosts: ["http://127.0.0.1:9200"]   # ES服务器地址

启动

./bin/kibana

访问

http://127.0.0.1:5601/app/kibana

基本概念

  • 接近实时(NRT Near Real Time ),从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒内)

  • 索引(index),索引就是拥有相似特征的文档的集合。一个索引由一个名字来标识(必须全部是小写字母)。在集群中可以定义任意多的索引。

  • 类型(type),在一个索引中可以定义一种或多种类型。类型是索引的一个逻辑上的分类/分区,其语义完全由用户确定。

  • 映射(Mapping),类似于传统关系型数据中table的schema,用于定义一个索引(index)中的类型(type)的数据的结构。可以手动创建type(相当于table)和mapping(相关与schema)。在默认配置下,ES可以根据插入的数据自动地创建type及其mapping。 mapping中主要包括字段名、字段数据类型和字段索引类型

  • 文档(document),文档是一个可被索引的基础信息单元,类似于表中的一条记录(json)

以下是5.x版本和6.x版本的模型如下

NOTE: 在5.x版本以前可以在一个索引中定义多个类型,6.x之后版本也可以使用但是不推荐,在7~8.x版本中彻底移除一个索引中创建多个类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJ6PkrJG-1679215134306)(assets/image-20230319141929186.png)]

创建测试数据集

官方提供了示例数据,加载示例数据的方式

wget https://download.elastic.co/demos/kibana/gettingstarted/logs.jsonl.gz
wget https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip
wget https://download.elastic.co/demos/kibana/gettingstarted/shakespeare_6.0.json

数据集创建

PUT /shakespeare
{
 "mappings": {
  "doc": {
   "properties": {
    "speaker": {"type": "keyword"},
    "play_name": {"type": "keyword"},
    "line_id": {"type": "integer"},
    "speech_number": {"type": "integer"}
   }
  }
 }
}

PUT /bank
{
 "mappings": {
  "account": {
   "properties": {
    "account_number": {"type": "integer"},
    "balance": {"type": "integer"},
    "firstname": {"type": "keyword"},
    "lastname": {"type": "keyword"},
    "age": {"type": "integer"},
    "gender": {"type": "keyword"},
    "address": {"type": "text"},
    "employer": {"type": "keyword"},
    "email": {"type": "keyword"},
    "city": {"type": "keyword"},
    "state": {"type": "keyword"}
   }
  }
 }
}

查看索引

GET /_cat/indices?v

health status index                uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana_1            yLxMUBLfT3GHGnVuvhXbJg   1   0          4            0     14.5kb         14.5kb
yellow open   bank                 jJujmI8WQnGgKbtutfhkvw   5   1       1000            0    327.2kb        327.2kb
green  open   .kibana_task_manager 5itOVO27SIuSc9qE73dabw   1   0          2            0     12.6kb         12.6kb
yellow open   shakespeare          Mv98eNoUTpaGIBJXkBmR3Q   5   1     111396            0     21.8mb         21.8mb

查看数据文档

$ curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/shakespeare/doc/_bulk?pretty' --data-binary @shakespeare_6.0.json

GET /shakespeare/doc/_search
{
  "query": {
    "match_all": {}
  }
}

$ curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json

GET /bank/account/_search
{
  "query": {
    "match_all": {}
  }
}

简单的测试数据集

PUT /ems
{
  "mappings":{
    "emp":{
      "properties":{
        "name":{ "type":"text" },
        "age":{ "type":"integer" },
        "birth":{ "type":"date" },
        "content":{ "type":"text" },
        "address":{ "type":"keyword" }
      }
    }
  }
}

PUT /ems/emp/_bulk
{"index":{}}
  {"name":"apple","age":23,"bir":"2019-8-22","content":"Choosing a good MVC framework for the development team is a difficult task, and it takes a high level of experience to choose among the many possible solutions","address":"beijing"}
{"index":{}}
  {"name":"banana","age":24,"bir":"2021-6-6","content":"The Spring framework is a layered architecture consisting of seven well-defined modules. The Spring module is built on top of a core container that defines how beans are created, configured, and managed","address":"shandong"}
{"index":{}}
  {"name":"cat","age":8,"bir":"2023-1-16","content":"As the micro-services framework of the Java language, Spring Cloud relies on Spring Boot for fast development, continuous delivery, and easy deployment. Spring Cloud has a lot of components covering all aspects of micro-services, and it's getting better and better with the open source community of Spring and companies like Netflix and Pivotal","address":"shanghai"}
{"index":{}}
  {"name":"dog","age":9,"bir":"2022-9-24","content":"Spring's goal is to simplify Java development in all its aspects. This leads to more explanations of how Spring simplifies Java Development?","address":"nanjing"}
{"index":{}}
  {"name":"ears","age":43,"bir":"2018-12-12","content":"Redis is an open-source, web-enabled, memory-based, persistent, Key-Value database written in ANSI C, and provides apis in multiple languages","address":"hangzhou"}
{"index":{}}
  {"name":"fat","age":59,"bir":"2017-12-23","content":"Elastic search is a Lucene-based search server. It provides a distributed, multi-user, full-text search engine based on the RESTful web interface","address":"fujian"}


GET /ems/emp/_search
{
  "query": {
    "match_all": {}
  }
}

基本操作

主要是使用devtools来进行前端命令操作

索引(index)操作

index的增删改查

# 创建索引
PUT /indexname/ 
# 删除索引
DELETE /indexname
# 删除所有索引[ElasticSearch会自带两个索引,如果删除kibana客户端将不能使用,只能重启]
DELETE /*	
# 查看索引信息
GET /_cat/indices?v 

类型(type)操作

创建index指定mapping,要求index不存在

  • 对于类型,es7每个索引只有一种类型
  • 对于属性类型,可以设置为 text , keyword , date ,integer, long , double , boolean,ip
PUT /book
{
  "mappings": {
    "musicbook": { 
      "properties": {
        "name":{"type":"keyword"},
        "price":{"type":"double"},
        "desc":{"type":"text"}
      }
    }
  }
}
output:
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "book"
}

查看type

GET /book/_mapping
output:
{
  "book" : {
    "mappings" : {
      "musicbook" : {
        "properties" : {
          "desc" : {
            "type" : "text"
          },
          "name" : {
            "type" : "keyword"
          },
          "price" : {
            "type" : "double"
          }
        }
      }
    }
  }
}

文档(document)操作

插入文档

PUT /book/musicbook/1
{
  "name":"ClassicMusic",
  "price":"22.0",
  "desc":"This is a book about classic music"
}
output:
{
  "_index" : "book",
  "_type" : "musicbook",
  "_id" : "1",
  "_version" : 3,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

查询文档

GET /book/musicBook/1
output:
{
  "_index" : "book",
  "_type" : "musicbook",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "ClassicMusic",
    "price" : "22.0",
    "desc" : "This is a book about classic music"
  }
}

删除文档

DELETE /book/musicBook/1

更新文档

POST /book/musicbook/1
{
  "name":"PopMusic",  
  "price":"17.0"
}
output:
{
  "_index" : "book",
  "_type" : "musicbook",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

再次查询文档发现之前的其他字段都被覆盖掉,不想覆盖需要以下方式更新

POST /book/musicbook/1/_update
{
  "doc": {
    "price":"40"
  }
}

批量操作

批量操作只是将多个操作写在一条命令中,并非原子操作,仍旧分步执行,并且不会由于单个命令失败而停止执行后续命令

同时增加两个文档

PUT /book/musicbook/_bulk
{"index":{"_id": "3"}}
  { "name":"America's Music", "price":"57","des":"An ear-opening exploration of music's New World, from Puritan psalmody to Hamilton"}
{"index":{"_id": "4"}}
  {"name":"Basic Music Theory","price":"48","desc":"The text covers various concepts in music theory, some of which are fundamental, and others are advanced and complex"}

同时修改和删除文档

PUT /book/musicbook/_bulk
{"update":{"_id":"3"}}
	{"doc":{"name":"after change"}}
{"delete":{"_id":"4"}}

高级检索(Query)

ES官方提供了两中检索方式:

  • 通过 URL 参数搜索

    GET /索引/类型/_search?参数
    
  • 通过 DSL(Domain Specified Language) 搜索

    GET /索引/类型/_search {}
    

通过URL查询

GET /ems/emp/_search?q=*&sort=age:desc&size=5&from=0&_source=name,age,bir

通过DSL查询

查询所有

GET /ems/emp/_search
{
  "query": {
    "match_all": {}
  }
}

指定返回条数

GET /ems/emp/_search
{
  "query": {
    "match_all": {}
  },
  "size": 5
}

分页查询

GET /ems/emp/_search
{
  "query": {
    "match_all": {}
  },
  "size": 5,
  "from": 0
}

查询字段

GET /ems/emp/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["name","age"]
}

查询关键词

GET /ems/emp/_search
{
  "query": {
    "term": {
      "address": {
        "value": "fujian"
      }
    }
  }
}

注意

  • 使用term查询,默认使用标准分词器(StandardAnalyzer),标准分词器对于英文单词分词,对于中文单字分词
  • keyword , date ,integer, long , double , boolean or ip 这些类型不分词**,**只有text类型分词

范围查询

GET /ems/emp/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 5,
        "lte": 10
      }
    }
  }
}

前缀查询

GET /ems/emp/_search
{
  "query": {
    "prefix": {
      "name": {
        "value": "F"
      }
    }
  }
}

通配符查询

GET /ems/emp/_search
{
  "query": {
    "wildcard": {
      "name": {
        "value": "Ca?"
      }
    }
  }
}

多id查询

GET /ems/emp/_search
{
  "query": {
    "ids": {
      "values": ["AlSspHYBh-o7eO8i7bUf","BVSspHYBh-o7eO8i7bUf"]
    }
  }
}

模糊查询

GET /ems/emp/_search
{
  "query": {
      "fuzzy": {
        "content": "sprin"
      }
  }
}

布尔查询

bool 关键字: 用来组合多个条件实现复杂查询

  • must: 相当于&& 同时成立
  • should: 相当于|| 成立一个就行
  • must_not: 相当于! 不能满足任何一个
GET /ems/emp/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "age": {
              "gte": 5,
              "lte": 10
            }
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "address": {
              "value": "nanjing"
            }
          }
        }
      ]
    }
  }
}

多字段查询

可以指定分词器

GET /dangdang/book/_search
{
  "query": {
    "query_string": {
      "query": "spring",
      // "analyzer": "ik_max_word", 
      "fields": ["name","content"]
    }
  }
}

需要注意的点

(1)大小写问题

elasticsearch在创建倒排索引时,就已经将大写转为小写,而后写入索引

GET /_analyze
{
  "text": "Fat",
  "analyzer": "standard"
}
output:
{
  "tokens" : [
    {
      "token" : "fat",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "<ALPHANUM>",
      "position" : 0
    }
  ]
}

索引建立过程:分词 -> 语法处理(还原时态等等)-> 排序 -> 创建索引

https://www.elastic.co/guide/en/elasticsearch/reference/6.0/normalizer.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图形视图框架的坐标

图形视图基于笛卡尔坐标系;项目在场景中的位置和几何图形由两组数字表示&#xff1a;X 坐标和 Y 坐标。使用未变换的视图观察场景时&#xff0c;场景上的一个单元由屏幕上的一个像素表示。 图形视图中有三种有效的坐标系&#xff1a; 项目坐标场景坐标视图坐标为了简化实现图形…

opencv仿射变换之获取变换矩阵

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

JavaSe第10次笔记

1.Java中&#xff0c;static不能修饰局部变量。 2.构造代码块&#xff1a;可用于成员变量的赋值&#xff0c;但需要注意的是&#xff0c;构造代码块最先执行(比构造方法先)。 3.静态代码块(可用于静态成员变量赋值)&#xff1a;写法如下 static { 静态成员操作; } (比构造…

Python逆向及相关知识

今天第二次看见python字节码的逆向题&#xff0c;然后发现了一个介绍Python逆向的文章&#xff0c;所以把文章里的内容简单整理记录一下。 文章参考&#xff1a;https://www.cnblogs.com/blili/p/11799398.html Python运行原理&#xff1a; 一.什么是Python Python 是一种解…

ChatGPT加强版GPT-4面世,打工人的方式将被颠覆

&#x1f517; 运行环境&#xff1a;chatGPT&#xff0c;GPT-4 &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#…

推荐一款卸载软件的小工具-《UninstallToo》

目录 UninstallToo介绍 UninstallToo下载 UninstallToo使用 总结 UninstallToo介绍 Uninstall Tool 是一款可以用来替代“添加/删除程序”的工具。它允许您显示隐藏的安装程序&#xff0c;按名称过滤已安装程序的列表&#xff0c;强行写在程序&#xff0c;浏览注册表项目&a…

【Vue】Vue的安装

&#x1f3c6;今日学习目标&#xff1a;Vue3的安装 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人格言&#xff1a;生如芥子&#xff0c;心藏须弥 ⏰本期期数&#xff1a;第一期 &#x1f389;专栏系列&#xff1a;Vue3 文章目录前言Vue3安装独立版本CDN安装第一个Vue程序总…

元数据管理实践数据血缘

元数据管理实践&数据血缘 什么是元数据&#xff1f;元数据MetaData狭义的解释是用来描述数据的数据&#xff0c;广义的来看&#xff0c;除了业务逻辑直接读写处理的那些业务数据&#xff0c;所有其它用来维持整个系统运转所需的信息&#xff0f;数据都可以叫作元数据。比如…

训练自己的GPT2-Chinese模型

文章目录效果抢先看准备工作环境搭建创建虚拟环境训练&预测项目结构模型预测续写训练模型遇到的问题及解决办法显存不足生成的内容一样文末效果抢先看 准备工作 从GitHub上拉去项目到本地&#xff0c;准备已训练好的模型百度网盘&#xff1a;提取码【9dvu】。 gpt2对联训…

10.0自定义SystemUI下拉状态栏和通知栏视图(六)之监听系统通知

1.前言 在进行rom产品定制化开发中,在10.0中针对systemui下拉状态栏和通知栏的定制UI的工作开发中,原生系统的下拉状态栏和通知栏的视图UI在产品开发中会不太满足功能, 所以根据产品需要来自定义SystemUI的下拉状态栏和通知栏功能,首选实现的就是下拉通知栏左滑删除通知的部…

【12】SCI易中期刊推荐——计算机信息系统(中科院4区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…

SpringCloudAlibaba配置中心: nacos-config

nacos-config配置中心 本项目代码与笔记已存放在Gitee仓库 地址&#xff1a; 代码&#xff0c;笔记 文章目录nacos-config配置中心1.1 快速开始1.2 搭建nacos-config服务1.3 Config相关配置1.3.1 支持profile粒度的配置示例&#xff1a;1.3.2 支持命名空间分类配置(按环境规类…

【批处理】- 批处理自动安装Mysql与Redis

前言 在全新环境中安装MySQL与Redis操作是挺麻烦的&#xff0c;于是就想使用脚本来自动安装&#xff0c;使用批处理进行一步到位的安装&#xff0c;后面还能使用工具进行打包成exe可执行文件&#xff0c;一键安装&#xff0c;最后能够更好的部署项目到windows系统的服务器。 …

READ: Large-Scale Neural Scene Rendering for Autonomous Driving

READ: Large-Scale Neural Scene Rendering for Autonomous Driving &#xff1a;面向自动驾驶的大规模神经场景绘制 门卷积 https://www.jianshu.com/p/09fc8490104d https://blog.csdn.net/weixin_44996354/article/details/117409438摘要&#xff1a;论文提出了一种大规模神…

vue2前端实现html导出pdf功能

1. 功能实现方案 1.html转换成canvas后生成图片导出pdf&#xff08;本文选用&#xff09; html转canvas插件&#xff1a;html2canvas是一款将HTML代码转换成Canvas的插件&#xff1b;canvas生成pdf&#xff1a;jsPDF是一个使用Javascript语言生成PDF的开源库 2.HTML代码转出…

【剑指offer】10~11.斐波那契数列(C# 实现)

文章目录前言关于编译环境10- I. 斐波那契数列10- II. 青蛙跳台阶问题11. 旋转数组的最小数字结语前言 &#x1f340; 大家好&#xff0c;我是哈桑。这是自己的 C# 做题记录&#xff0c;方便自己学习的同时分享出来。 关于编译环境 注意&#xff0c;笔者使用的编译环境是 .NET …

Java学习星球,Java学习路线

目录一、Java学习路线二、学习计划三、为何会有Java学习星球&#xff1f;四、加入星球后&#xff0c;你可以得到什么&#xff1f;五、如何加入Java学习星球&#xff1f;六、打卡挑战大家好&#xff0c;我是哪吒&#xff0c;一个靠着热情攀登至C站巅峰的中年男子&#xff0c;CSD…

全网最火爆,Python接口自动化测试-接口数据 RSA 加密和签名实现(超详细)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 在工作中&#xff0…

算法基础---数学知识

文章目录 质数 试除法判定质数试除法分解质因数朴素筛法求质数埃氏筛法求质数线性筛法求质数约数 试除法求所有约数试除法求所有约数之和约数个数和约数之和欧几里得算法一、质数 1.试除法判定质数--O(sqrt(N)) 原理&#xff1a;把从[2,n-1]中的每一个自然数作为除数来除n&a…

基于 Apache Flink 的实时计算数据流业务引擎在京东零售的实践和落地

摘要&#xff1a;本文整理自京东零售-技术研发与数据中心张颖&闫莉刚在 ApacheCon Asia 2022 的分享。内容主要包括五个方面&#xff1a; 京东零售实时计算的现状实时计算框架场景优化&#xff1a;TopN场景优化&#xff1a;动线分析场景优化&#xff1a;FLINK 一站式机器学…