Elasticsearch 入门向使用

文章目录

  • ElasticSearch
    • 简介
    • 倒排索引
    • 安装(单节点)
    • 分词器
    • kibana
    • 与Mysql概念上的对比
    • 索引库CRUD
    • 文档CRUD
    • DSL查询
      • 相关性算分
      • Function Score Query自定义算分
      • Boolean Query
    • 搜索结果处理
      • 排序
      • 分页
      • 高亮
    • 数据聚合 aggregations
    • 自动补全
    • 数据同步
    • 集群

ElasticSearch

简介

Elasticsearch(中文译为“弹性搜索”)是一个开源的分布式搜索引擎,它用于全文检索、结构化搜索和分析。它是Elastic公司的一个产品,基于Apache Lucene搜索库构建而成。Elasticsearch提供了一个RESTful API,使其易于集成到各种应用程序中。

该搜索引擎被广泛用于构建实时搜索和分析引擎,适用于各种用例,包括网站搜索、日志和事件数据分析、企业应用程序搜索等。Elasticsearch能够处理大量数据,并在分布式环境中进行水平扩展,使其适用于大规模数据存储和检索。

除了搜索功能外,Elasticsearch还具备聚合、过滤、排序等强大的分析能力。它通常与Logstash(用于数据收集和日志处理)以及Kibana(用于数据可视化和管理)一起使用,构成ELK堆栈,用于全面的日志和事件数据处理。

倒排索引

在这里插入图片描述

安装(单节点)

# 创建docker网络,使elasticsearch和kibana在同一网段
docker network create es-net

# 拉取es镜像,es最后一个7.x版本
docker pull elsaticsearch:7.17.16

# 启动es容器
# -e "ES_JAVA_OPTS=-Xms512m -Xmx512m"设置内存大小
# -e "discovery.type=single-node"设置单机版
# 将数据和插件路径挂载出来
# 设置加入之前创建的网络es-net 暴露9200 9300端口
docker run -d \
	--name elasticsearch \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.17.16

启动后访问: http://localhost:9200 可以看到以下信息

{
    "name": "758d042e95ca",
    "cluster_name": "docker-cluster",
    "cluster_uuid": "yPh8v3ySTcCk8lOrTT1aIA",
    "version": {
        "number": "7.17.16",
        "build_flavor": "default",
        "build_type": "docker",
        "build_hash": "2b23fa076334f8d4651aeebe458a955a2ae23218",
        "build_date": "2023-12-08T10:06:54.672540567Z",
        "build_snapshot": false,
        "lucene_version": "8.11.1",
        "minimum_wire_compatibility_version": "6.8.0",
        "minimum_index_compatibility_version": "6.0.0-beta1"
        },
    "tagline": "You Know, for Search"
}

分词器

  • 中文分词器 ik https://github.com/medcl/elasticsearch-analysis-ik
  • 拼音分词器 pinyin
    https://github.com/medcl/elasticsearch-analysis-pinyin

docker inspect elasticsearch

在这里插入图片描述

将分词器解压到es-plugins的挂载出来的目录中即可

kibana

docker pull kibana:7.17.16

docker run -d \
	--name mykibana \
    -p 5601:5601 \
    --network es-net \
    -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" \
kibana:7.17.16

安装后,访问 http://localhost:5601

在Dev tools中执行默认的语句,可以得到es详细信息

GET _search
{
  "query": {
    "match_all": {}
  }
}

{
  "took" : 6,
  "timed_out" : false,
  "_shards" : {
    "total" : 7,
    "successful" : 7,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 86,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : ".kibana_7.17.16_001",
        "_type" : "_doc",
        "_id" : "canvas-workpad-template:workpad-template-061d7868-2b4e-4dc8-8bf7-3772b52926e5",
          ..........................

执行 GET /

GET /

{
  "name" : "758d042e95ca",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "yPh8v3ySTcCk8lOrTT1aIA",
  "version" : {
    "number" : "7.17.16",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "2b23fa076334f8d4651aeebe458a955a2ae23218",
    "build_date" : "2023-12-08T10:06:54.672540567Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

与Mysql概念上的对比

esmysql
IndexDatabase
DSLSQL
DocumentRow
FieldColumn
MappingSchema

mapping属性: 对索引库中文档的约束

  • Type: 字段的数据类型
    • 字符串: text(可分词) keyword(精确值,不参与分词)
    • 数值: long integer short byte double float
    • 布尔: boolean
    • 日期: date
    • 对象: object
  • index: 是否创建索引,默认为true
  • analyzer: 使用哪种分词器
  • properties: 字段的子字段

索引库CRUD

创建索引库

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

响应:
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "person"
}

查询索引库

GET /索引库名

GET /person

删除索引库

DELETE /索引库名

DELETE /zbq

{
  "acknowledged" : true
}

修改: 索引库和mapping一旦创建不可修改!!!

但是可以新增新的字段

PUT /person/_mapping
{
  "properties": {
    "weight": {
      "type": "double",
      "index": false
    }
  }
}

文档CRUD

新增文档 DSL

POST /索引库名/_doc/文档id
{
    "字段1":"value1",
    "字段2":"value2",
    ...
}
POST /person/_doc/1
{
  "name":"alex",
  "age":12,
  "weight":48.20
}

查询文档

GET /索引库名/_doc/文档id

GET /person/_doc/1

删除文档

DELETE /索引库名/_doc/文档id

DELETE /person/_doc/1

修改文档:

分为两种: 全量修改和局部修改

全量修改, 删除原先文档再新增

POST /person/_doc/2
{
  "name":"albert",
  "age":12,
  "weight":48.20
}

局部修改: 只修改指定字段

POST /person/_update/1
{
  "doc": {
    "age":23
  }
}

DSL查询

基本语法:

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

分类:

  • 查询所有 match_all
GET /indexName/_search
{
	"query":{
        "match_all":{}
    }	
}
  • 全文检索(full text)
GET /indexName/_search
{
    "query":{
        "match":{
            "字段名": "值"
        }
    }
}
GET /indexName/_search
{
    "query":{
        "multi_match":{
            "query":"值",
            "fields":["字段1","字段2",...]
        }
    }
}
  • 精确查询: keyword 数值 日期等等类型查询

    • term: 精确查询
    GET /indexName/_search
    {
        "query":{
            "term":{
                "字段名":{
                    "value":"取值"
                }
            }
        }
    }
    
    • range: 范围
    GET /indexName/_search
    {
        "query":{
            "range":{
                "字段名":{
                    "gte":10,
                    "lte":20
                }
            }
        }
    }
    
  • 地理查询

    • geo_bounding_box: 某个矩形范围内的文档
    GET /indexName/_search
    {
        "query":{
            "geo_bounding_box":{
                "字段名":{
                    "top_left":{
                        "lat":1,
                        "lon":2
                    },
                    "bottom_right":{
                        "lat":3,
                        "lon":4
                    }
                }
            }
        }
    }
    
    • geo_distance: 查询到指定中心点距离的所有文档
    GET /indexName/_search
    {
        "query":{
            "geo_distance":{
            	"distance":"15km",
                "字段名":"经度,纬度"
            }
        }
    }
    
  • 复合查询

相关性算分

  • TF (Term Frequency)

T F = 词条出现次数 文档中词条总数 TF = \frac{词条出现次数}{文档中词条总数} TF=文档中词条总数词条出现次数

  • TF-IDF : es5.0以前
  • BM25: es5.0后

Function Score Query自定义算分

在这里插入图片描述

Boolean Query

一个或多个查询子句组合

  • must 参与算分,必须匹配
  • should 参与算分,选择性匹配
  • must_not 不参与算分,必须不成立
  • filter 不参与算分,必须匹配
GET /indexName/_search
{
    "query":{
        "bool":{
            "must":[
                {
                    全文检索,精确查询,地理查询等
                }
            ],
            "must_not":[
                {
                    全文检索,精确查询,地理查询等
                }
            ],
            "should":[{}],
            "filter":[{}]
        }
    }
}

搜索结果处理

排序

默认按照相关度算分排序
可排序字段:

  • keyword
  • 数值
  • 地理坐标
  • 日期
    使用上述字段时,就不再做相关性打分
GET /indexName/_search
{
    "query":{
        "match_all":{}
    },
    "sort":{
        "字段1":"asc / desc",
        "字段2":"asc / desc"
    }
}

分页

默认返回10条结果
通过from和size返回结果
和mysql中limit a,b 相似
from=10 size=10时,es会查询所有结果再从中截取想要的数据,单点时问题不太突出.当es集群部署时,要将所有的结果先聚合,在内存中排序后截取结果返回.数据量百万千万时非常恐怖的操作.es限制上限为10000条
如果非要获取10000条以后的数据:
es提供了解决方案, search after

GET /indexName/_search
{
    "query":{
        "match_all":{}
    },
    "sort":{
        "字段1":"asc / desc",
        "字段2":"asc / desc"
    },
    "from": 100,
    "size": 10
}

高亮

将搜索关键字突出显示

GET /indexName/_search
{
    "query":{
        "match":{
            "字段":"值"
        }
    },
    "highlight":{
        "fields":{
            "字段1":{
                "pre_tags":"<em>",
                "post_tags":"</em>"
            },
            "字段2":...
        }
    }
}

数据聚合 aggregations

  • 桶(Bucket)聚合
    • TermAggregation
    • Date Histogram
  • 度量(Metric)聚合
    • Avg
    • Max
    • Min
  • 管道(pipeline)聚合: 对其他聚合结果再聚合

自动补全

数据同步

es数据来自mysql

  • 同步阻塞式
  • 异步, 消息队列
  • 使用canal监听mysql的binlog

集群

个人机器情况: windows10 物理主机 配置虚拟网卡 ip为 192.168.85.200 网关 192.168.85.2

3台centos7.9.2009 配置静态ip

3台机器ip分别为: 192.168.85.201 192.168.85.202 192.168.85.203

能做到任意节点相互ping通

搭建3节点的es集群:

将下方配置保存为elasticsearch.yml, 挂载数据卷时使用,作为es配置

192.168.85.201:

cluster.name: es
# 当前该节点的名称,每个节点不能重复es-node-1,es-node-2,es-node-3
node.name: es01
# # 当前该节点是不是有资格竞选主节点
node.master: true
# # 当前该节点是否存储数据
node.data: true
# # 设置为公开访问
network.host: 0.0.0.0
# # 设置其它节点和该节点交互的本机器的ip地址,三台各自为
network.publish_host: 192.168.85.201
# # 设置映射端口
http.port: 9200
# # 内部节点之间沟通端口
transport.tcp.port: 9300
#
# # 支持跨域访问
http.cors.enabled: true

http.cors.allow-origin: "*"
#
# # 配置集群的主机地址
discovery.seed_hosts: ["192.168.85.201","192.168.85.202","192.168.85.203"]
# # 初始主节点,使用一组初始的符合主条件的节点引导集群
cluster.initial_master_nodes: ["es01","es02","es03"]
# # 节点等待响应的时间,默认值是30秒,增加这个值,从一定程度上会减少误判导致脑裂
discovery.zen.ping_timeout: 30s
# # 配置集群最少主节点数目,通常为 (可成为主节点的主机数目 / 2) + 1
discovery.zen.minimum_master_nodes: 2
# # 禁用交换内存,提升效率
bootstrap.memory_lock: false

然后使用docker启动容器

docker run --name=es01 -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /root/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es01-data:/usr/share/elasticsearch/data \
-v es01-plugins:/usr/share/elasticsearch/plugins \
--restart=always \
-d elasticsearch:7.17.16

第二台: 192.168.85.202

cluster.name: es
# 当前该节点的名称,每个节点不能重复es-node-1,es-node-2,es-node-3
node.name: es02
# # # 当前该节点是不是有资格竞选主节点
node.master: true
# # # 当前该节点是否存储数据
node.data: true
# # # 设置为公开访问

network.host: 0.0.0.0
# # # 设置其它节点和该节点交互的本机器的ip地址,三台各自为
network.publish_host: 192.168.85.202
# # # 设置映射端口
http.port: 9200
# # # 内部节点之间沟通端口
transport.tcp.port: 9300
# #
# # # 支持跨域访问
http.cors.enabled: true
#


http.cors.allow-origin: "*"
# #
# # # 配置集群的主机地址
discovery.seed_hosts: ["192.168.85.201","192.168.85.202","192.168.85.203"]
# # # 初始主节点,使用一组初始的符合主条件的节点引导集群
cluster.initial_master_nodes: ["es01","es02","es03"]
# # # 节点等待响应的时间,默认值是30秒,增加这个值,从一定程度上会减少误判导致脑裂
discovery.zen.ping_timeout: 30s
# # # 配置集群最少主节点数目,通常为 (可成为主节点的主机数目 / 2) + 1
discovery.zen.minimum_master_nodes: 2
# # # 禁用交换内存,提升效率
bootstrap.memory_lock: false

docker run --name=es02 -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /root/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es02-data:/usr/share/elasticsearch/data \
-v es02-plugins:/usr/share/elasticsearch/plugins \
--restart=always \
-d elasticsearch:7.17.16

第三台: 192.168.85.203

cluster.name: es
# 当前该节点的名称,每个节点不能重复es-node-1,es-node-2,es-node-3
node.name: es03
# # # 当前该节点是不是有资格竞选主节点
node.master: true
# # # 当前该节点是否存储数据
node.data: true
# # # 设置为公开访问

network.host: 0.0.0.0
# # # 设置其它节点和该节点交互的本机器的ip地址,三台各自为
network.publish_host: 192.168.85.203
# # # 设置映射端口
http.port: 9200
# # # 内部节点之间沟通端口
transport.tcp.port: 9300
# #
# # # 支持跨域访问
http.cors.enabled: true
#


http.cors.allow-origin: "*"
# #
# # # 配置集群的主机地址
discovery.seed_hosts: ["192.168.85.201","192.168.85.202","192.168.85.203"]
# # # 初始主节点,使用一组初始的符合主条件的节点引导集群
cluster.initial_master_nodes: ["es01","es02","es03"]
# # # 节点等待响应的时间,默认值是30秒,增加这个值,从一定程度上会减少误判导致脑裂
discovery.zen.ping_timeout: 30s
# # # 配置集群最少主节点数目,通常为 (可成为主节点的主机数目 / 2) + 1
discovery.zen.minimum_master_nodes: 2
# # # 禁用交换内存,提升效率
bootstrap.memory_lock: false
docker run --name=es03 -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v /root/es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v es03-data:/usr/share/elasticsearch/data \
-v es03-plugins:/usr/share/elasticsearch/plugins \
--restart=always \
-d elasticsearch:7.17.16

安装 cerebro https://github.com/lmenezes/cerebro/releases/tag/v0.9.4

启动bin目录下 cerebro.bat

登陆界面连接任意一台即可:

成功界面:

在这里插入图片描述

可以看到3个节点工作正常, es02为master节点

使用nginx配置反向代理

在nginx.conf中添加:

upstream   es-cluster {
        server 192.168.85.201:9200;
        server 192.168.85.202:9200;
        server 192.168.85.203:9200;
    }

    server {
        listen 8000;
        server_name localhost;

        location / {
            proxy_pass http://es-cluster;
        }
    
    }

访问 http://localhost:8000 即可

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

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

相关文章

【2023我的编程之旅】七次不同的计算机二级考试经历分享

目录 我报考过的科目 第一次报考MS Office 第二次报考Web语言&#xff0c;C语言&#xff0c;C语言 第三次报考C语言&#xff0c;C语言&#xff0c;Java语言 分享一些备考二级的方法 一些需要注意的细节 结语 2023年的CSDN征文活动已经进入了尾声&#xff0c;在这最后我…

全志D1-H芯片Tengine支持

简介 ​ Tengine 是 OPEN AI LAB 推出的边缘 AI 计算框架&#xff0c;致力于解决 AIoT 产业链碎片化问题&#xff0c;加速 AI 产业化落地。Tengine 为了解决 AIoT 应用落地问题&#xff0c;重点关注嵌入式设备上的边缘 AI 计算推理&#xff0c;为海量 AIoT 应用和设备提供高性…

学习Spring的第九天

Spring Bean的生命周期 Bean的实例化阶段 : 看配置文件里Bean标签的信息 , 来判断进行实例化(如是否有lazy-init , 或者是否是FactoryBean等等) (实际就是Bean标签表面的信息 , 即BeanDefinition) Bean的初始化阶段 : 对Bean的属性(重要 : BeanPostProcessor方法 , 及如下 , pr…

用VSCode玩STM32的烧录工具 CooCox Cortex Flash Programmer

一、下载软件 经热心兄弟推荐的版本&#xff0c;不知道有没有版权&#xff0c;如有版权问题&#xff0c;请通知删除。 CSDN - 0积分下载&#xff1a;https://download.csdn.net/download/qq_49053936/88744187 二、生成bin文件 插件不同&#xff0c;方法有所不同&#xff0c;各…

【日常聊聊】自然语言处理的发展

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 技术进步 应用场景 挑战与前景 伦理和社会影响 实践经验 结语 我的其他博客 前言 自然语言处理&#xff08;NLP&#xf…

关于ElasticSearch,你应该知道的

一、集群规划优化实践 1、基于目标数据量规划集群 在业务初期&#xff0c;经常被问到的问题&#xff0c;要几个节点的集群&#xff0c;内存、CPU要多大&#xff0c;要不要SSD&#xff1f; 最主要的考虑点是&#xff1a;你的目标存储数据量是多大&#xff1f;可以针对目标数据…

【C++ 记忆站】内联函数

文章目录 一、概念二、特性1、inline是一种以空间换时间的做法如果编译器将函数当成内联函数处理在编译阶段,会用函数体替换函数调用2、inline对于编译器而言只是一个建议若一个函数代码很长则编译器不会将它变成内联3、一般来说,函数代码在10行及以内时这时编译器会将它优化为…

学习【Git项目管理工具】这一篇就够了

目录 1. Git概述2. Git代码托管服务3. Git常用命令3-1. Git全局配置设置用户信息查看配置信息 3-2. 获取Git仓库本地初始化仓库克隆远程仓库 3-3. 基本概念工作区文件状态 3-4. 本地仓库操作git reset 操作 3-5. 远程仓库操作查看远程仓库添加远程仓库推送远程仓库拉取远程仓库…

Gorm 应用开发时区问题与unique唯一索引字段数据冲突问题

文章目录 一、定义表模型时区问题1.1 time.Time 与int641.2 优势 二、unique唯一索引字段数据冲突问题 一、定义表模型时区问题 1.1 time.Time 与int64 一般情况下&#xff0c;我们在定义表模型的时候&#xff0c;会使用time.Time&#xff0c;但是会根据当前时间存储。返回给…

ARM多核调度器DSU

1. 背景 从A75开始&#xff0c;ARM提出了一个新的多核心管理系统单元&#xff0c;叫做DSU(DynamIQ Shared Unit)。DSU的核心功能是控制CPU内核&#xff0c;使其成簇Cluster使用&#xff0c;簇内每一个核心可以单独开关、调整频率/电压&#xff0c;能效表现更佳&#xff0c;甚至…

二、VS2019编译的VTK9.0.0 + Qt 5.14.2 环境测试

1. 使用CMake VS2019 编译vtk 9.0.0 时,需要启用支持Qt开关、如下图 如果不会编译的可以参见我的这篇文章: 一、VTK 9.0.0 编译安装步骤 VS2019 CMake3.26.0-CSDN博客 打开Qt5.14.2 ,创建Qt Widget 项目: 构建设置选择 MSVC2017 64bit pro 项目文件加入两行配置: …

SOCKET编程和TCP通信案例三次握手四次挥手

文章目录 一、SOCKET1、网络套接字SOCKET2、网络字节序2.1、小端法2.2、大端法2.3、字节序转换3、IP地址转换函数3.1、本地字节序转网络字节序3.1.1、函数原型&#xff1a;3.1.2、返回值3.2、网络字节序转本地字节序3.2.1、函数原型3.2.2、返回值4、sockaddr地址结构&#xff0…

菜鸟关于做前、后端的整理(html、js),以及疑问

涉及到后端的接口py&#xff0c;前端html和js 这三部分就按照如下格式放到server项目主路径下&#xff0c;这样后端机可以作为一个前端server main.pystaticmain.jsmain.htmlhtml 首先是html要设定网页的显示 <!DOCTYPE html> <html> <head><title>…

深入解析JavaScript中的var、let和const

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 变量的声明是编程中非常基础和关键的概念。在ES6之前,JavaScript只有…

第十四章 MyBatis

第十四章 MyBatis 1.入门-课程介绍2.入门-快速入门程序3.配置SQL提示4.入门-JDBC5.入门-数据库连接池6.入门-lombok工具包介绍7.基础操作-环境准备8.基础操作-删除9.基础操作-删除&#xff08;预编译SQL&#xff09;10.基础操作-新增11.基础操作-新增&#xff08;主键返回&…

006.Oracle事务处理

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

若依cloud框架使用定时任务实践

参考博客 https://blog.csdn.net/m0_60563637/article/details/126429284 具体操作 1.在job服务的task包下新建一个你需要的Task类 代码&#xff1a; Slf4j Component("propertyTask") public class PropertyTask {public void testDemo(){System.out.println(&q…

XHCMS靶场小记(熊海)

文件包含漏洞 template下的header.php中存在文件包含漏洞&#xff08;该文件被file文件夹下的多数文件进行包含&#xff09; f参数可以包含任意文件通过php格式解析&#xff08;这是文件包含点&#xff09; 代码分析 根目录下的index.php文件&#xff1b;r参数用于获取包含文…

[足式机器人]Part2 Dr. CAN学习笔记- Kalman Filter卡尔曼滤波器Ch05-3+4

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记 - Kalman Filter卡尔曼滤波器 Ch05-34 3. Step by step : Deriation of Kalmen Gain 卡尔曼增益/因数 详细推导4. Priori/Posterrori error Covariance Martix 误差协方差矩阵 3. Step by step :…

组件(Component):可重用的元素

目标效果&#xff1a;点击粉色按钮后&#xff0c;出现一行“为什么非要点我&#xff1f;”的文字。 用组件的方式实现&#xff1a;首先单击项目文件夹01&#xff0c;然后右键弹窗中点击“添加新文件” 。 选择 QML File 文件&#xff1a; 文件名就叫Button&#xff0c;然后把代…