文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ES学习看这一篇文章就够了

2023-09-01 22:24

关注

第一章 ES简介

第1节 ES介绍

1234
1、Elasticsearch是一个基于Lucene的搜索服务器2、提供了一个分布式的全文搜索引擎,基于restful web接口3、Elasticsearch是用Java语言开发的,基于Apache协议的开源项目,是目前最受欢迎的企业搜索引擎4、Elasticsearch广泛运用于云计算中,能够达到实时搜索,具有稳定,可靠,快速的特点

第2节 ES版本


第二章 安装(v6.3.2)

第1节 window下单点安装ES


第2节 window下安装Head插件

1 Head插件介绍

1
是一款能连接ES,并提供对ES进行操作的可视化界面

2 Head插件下载地址

1
https://github.com/mobz/elasticsearch-head/archive/master.zip

3 安装步骤

123456789101112131415161718
1. 电脑首先要安装node.js,因为安装Head插件需要使用npm命令注意: 由于npm命令使用的是国外的镜像库,所以可能会很慢或者发生失败的情况,可以有两种方式解决    方式一: 切换镜像地址        -- 查看当前npm的镜像地址: npm config get registry            -- 默认地址为: https://registry.npmjs.org/        -- 将默认镜像地址设置成淘宝的地址: npm config set registry https://registry.npm.taobao.org    方式二: 使用cnpm        -- 下载cnpm并且同时设置镜像源命令 npm install cnpm -g --registry=https://registry.npm.taobao.org        -- 使用cnpm -v查看        -- 以后使用cnpm 命令安装依赖        2. nodejs安装好之后,那么开始解压head插件压缩包3. 切换到解压文件目录下 D:\soft\elasticsearch-head-master,我的解压到了d盘soft目录下4. 使用cmd命令行工具切换到解压目录下,执行命令 npm install 安装5. 安装完成之后启动head插件 npm run start 这时候就会在在计算机9100端口号上启动服务6. 在浏览器访问,在浏览器中输入 http://localhost:9100/ 访问


 

4 Head插件和ES关联配置

1
因为两个服务之间可能ip地址和端口号不同造成跨域的问题,所以需要配置可以跨域

第3节 window ES 集群安装

1 集群配置步骤

1234
1. 创建一个elasticsearch-cluster文件夹2. 解压我们的elasticsearch-6.3.2.zip压缩包到elasticsearch-cluster目录下3. 分别命名为 elasticsearch-node01,elasticsearch-node02,elasticsearch-node034. 修改配置文件

2 配置文件编写

 

12
1. 图中黑色的粗框代表这分片2. 细的黑框代表着副本

第三章 基础概念

第1节 索引

1
含有相同属性的文档集合,相当于我们MYSQL数据库中的数据库(DATABASE)

第2节 类型

1
索引可以定义一个或多个类型(ES6中已经逐步弃用,在更高的7版本中已经删除),文档必须属于一个类型,相当于我们MYSQL中的一个表(TABLE)

第3节 文档

1
文档是可以被索引的基本数据单位,相当于MYSQL数据库表中的一行记录

第4节 分片/副本(备份)


第四章 基本用法

第1节 ES 的 RESTFul API


第2节 创建索引

1 使用Head插件创建索引


 

2 结构化索引/非结构化索引

12345678910111213141516171819202122232425262728293031323334353637383940414243
进入我们的Head界面,进入概览,点击索引名称下面的信息,点击索引信息,查看数据里面有一个mappings属性,内容为空,说明我们此索引为非结构化索引{    "state": "open",    "settings": {        "index": {            "creation_date": "1597547149325",            "number_of_shards": "5",            "number_of_replicas": "1",            "uuid": "UvYCPtp0TZeCiPexCT517g",            "version": {                "created": "6030299"            },            "provided_name": "book"        }    },    "mappings": {},    "aliases": [],    "primary_terms": {        "0": 1,        "1": 1,        "2": 1,        "3": 1,        "4": 1    },    "in_sync_allocations": {        "0": [            "BHBNGrGCSiOl-wuKptvGtQ"        ],        "1": [            "yMyL9GsMR9SziVr9OK_Uxw"        ],        "2": [            "b8EGEtGlTySAqvlKPtW_EA"        ],        "3": [            "0azU6MwTSCqMdzVXyuPVrw"        ],        "4": [            "DY2oxeUuSNaxva5dgKTSAg"        ]    }}

 

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
3、给上面的非结构化索引添加一些结构化的数据,让他变成结构化索引点击易读,点击验证json,防止自己写的json数据有问题,点击提交请求properties: 关键字,设置属性type: 关键字,设置属性类型{    "author": {        "properties": {            "author_name": {                "type": "text"            }        }    }}4、添加成功标志{    "acknowledged": true}5、在进入概览点击索引信息查看数据(mappings中就有了机构化数据){    "state": "open",    "settings": {        "index": {            "creation_date": "1597547149325",            "number_of_shards": "5",            "number_of_replicas": "1",            "uuid": "UvYCPtp0TZeCiPexCT517g",            "version": {                "created": "6030299"            },            "provided_name": "book"        }    },    "mappings": {        "author": {            "properties": {                "author_name": {                    "type": "text"                }            }        }    },    "aliases": [],    "primary_terms": {        "0": 1,        "1": 1,        "2": 1,        "3": 1,        "4": 1    },    "in_sync_allocations": {        "0": [            "BHBNGrGCSiOl-wuKptvGtQ"        ],        "1": [            "yMyL9GsMR9SziVr9OK_Uxw"        ],        "2": [            "b8EGEtGlTySAqvlKPtW_EA"        ],        "3": [            "0azU6MwTSCqMdzVXyuPVrw"        ],        "4": [            "DY2oxeUuSNaxva5dgKTSAg"        ]    }}

3 使用postman创建索引

1
Head在进行结构化数据创建的时候,验证json数据格式比较麻烦,我们可以使用postman进行结构化数据创建

 


 

第3节 数据插入(postman)

1 指定id插入

 


 


 

2 自动生成id插入

 


 

第4节 数据修改(postman)

1 直接修改文档

 


 

2 使用脚本修改文档(了解)

2.1 Painless简介

12
1. Painless 是默认情况下 Elasticsearch 中提供的一种简单,安全的脚本语言2. 它专门设计用于 Elasticsearch,可以安全地使用内联和存储的脚本,默认情况下启用

2.2 Painless使用


 

第5节 数据删除(postman)

1 删除文档(postman)


 

2 删除索引(postman)


 

3 使用head删除索引


 

第五章 高级查询(Kibana)

第1节 Kibana安装

1 Kibana简介

1
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据.使用Kibana,可以通过各种图表进行高级数据分析及展示

2 Kibana下载


3 Kibana安装

1234
1、将下载的kibana-6.3.2-windows-x86_64.zip压缩包解压到指定文件夹下2、在bin目录下D:\soft\kibana-6.3.2-windows-x86_64\bin找到kibana.bat3、双击运行即可4、浏览器访问 http://localhost:5601/进入 Dev Tools选项

第2节 Kibana使用

1 基本操作

1.1 查看集群健康状态

1
GET /_cat/health?v

1.2 查看节点状态

1
GET /_cat/nodes?v

1.3 查看索引信息

1
GET /_cat/indices?v

1.4 创建索引

12345678
1. 命令 PUT /book2. 返回结果{  "acknowledged": true,  "shards_acknowledged": true,  "index": "book"}

1.5 删除索引

12345
1. 命令  DELETE /book2. 返回结果{  "acknowledged": true}

1.6 向文档中添加数据

12345
PUT /book/doc/1{  "name":"李雷",  "age":18}

1.7 查看文档类型

1234567
GET /book/doc/_mappingGET: 请求方式book: 索引(相当于MYSQL数据库的库名)doc : 类型(相当于数据库的表名)_mapping: ES的关键字查询文档类型

1.8 查看索引中的文档(根据ID查询)

1
GET /book/doc/1

1.9 更新索引中的文档

123456789101112
POST /book/doc/1/_update{  "doc":{    "name":"韩梅梅"  }}POST   : 请求方式book   : 索引名称doc    : 类型1      : 文档id_update: 关键字,用于更新

1.10 删除索引中的文档

1
DELETE /book/doc/2

1.11 对索引中的文档进行批量操作

1234567
POST /book/doc/_bulk{"index":{"_id":"3"}}{"name": "John Doe" }{"index":{"_id":"4"}}{"name": "Jane Doe" }_bulk: 批量操作

2 高级查询

2.1 数据导入


2.2 高级查询


2.2.1 简单搜索


2.2.2 条件搜索(match)


2.2.3 短语匹配搜索(match_phrase)


2.2.4 组合搜索(bool)


2.2.5 过滤搜索(filter)


2.2.6 搜索聚合(aggs)

具体ES的聚合函数请参考官方文档这里不再讲解


第六章 ES和SpringBoot整合(Spring-data版本使用)

第1节 分词器介绍

1 分词器的作用

1
将原始内容进行拆分,将一段话拆分成单词或者一个一个的字,或者语义单元

2 常见分词器


第2节 standars分词器演示(kibana工具)

1 演示英文


第3节 ik分词器安装和使用

1
medcl/elasticsearch-analysis-ik分词器是当前对中文支持最好的分词器

第4节 ik分词器演示(kibana工具)


第5节 ES和SpringBoot整合

1 创建SpringBoot项目

1234567
添加依赖,依赖在springboot-data中    org.springframework.boot    spring-boot-starter-data-elasticsearch

 

2 配置

12345
# 设置ES的节点地址# spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300,127.0.0.1:9301,127.0.0.1:9302spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300# es集群名称spring.data.elasticsearch.cluster-name=elasticsearch

3 常见的操作

3.1 映射ES文档的实体类

123456789101112131415161718192021222324252627282930313233343536373839
@Document(indexName = "bank",type = "account",shards = 5,replicas = 1)public class EsAccount {    @Id    private Long id;    @Field(type = FieldType.Long)    private Long account_number;    @Field(type = FieldType.Text) //是有IK分词器(一定要安装IK分词器)    private String firstname;    @Field(type = FieldType.Text)    private String address;    @Field(type = FieldType.Text)    private String gender;    @Field(type = FieldType.Text)    private String city;    @Field(type = FieldType.Long)    private Long balance;    @Field(type = FieldType.Text)    private String lastname;    @Field(type = FieldType.Text)    private String employer;    @Field(type = FieldType.Text)    private String state;    @Field(type = FieldType.Long)    private Long age;    @Field(type = FieldType.Text)    private String email;}

3.2 操作ES的接口

123456789101112131415161718192021222324
public interface EsAccountRepository extends ElasticsearchRepository {        List findByLastname(String lastname);        List findByAddress(String address);        void deleteByFirstname(String firstname);        Page findByAddress(String address, Pageable pageable);}

3.3 单元测试操作


第七章 ES和MYSQL数据同步

第1节 logstash简介

Logstash是一款开源的数据收集引擎,具备实时管道处理能力。简单来说,logstash作为数据源与数据存储分析工具之间的桥梁,结合ElasticSearch以及Kibana,能够极大方便数据的处理与分析。通过200多个插件,logstash可以接受几乎各种各样的数据。包括日志、网络请求、关系型数据库、传感器或物联网等等


 

第2节 logstash下载(6.3.2)


第3节 logstash配置(简单配置-单表/多表)

1234
logstash工作时,主要设置3个部分的工作属性。input:设置数据来源filter:可以对数据进行一定的加工处理过滤,但是不建议做复杂的处理逻辑。这个步骤不是必须的output:设置输出目标

第4节 logstash配置(其他配置)


1 使用时间字段进行追踪(一般使用更新时间字段)

1
在阿里巴巴嵩山版手册中强调,任何数据库表都必须有创建时间和更新时间字段,都是datetime类型,也就是保存时间为年月日时分秒
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
input{# 第1张表jdbc{# 设置当前jdbc的typetype => "department"# 数据库驱动地址jdbc_driver_library => "D:\\soft\\logstash-6.3.2\\lib\\mysql-connector-java-5.1.47.jar" # 数据库驱动类名jdbc_driver_class => "com.mysql.jdbc.Driver"# 数据库连接地址jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/gn_oa"# 数据库用户名jdbc_user => "root"# 数据库密码jdbc_password => "root"# 定时任务,一分钟同步一次schedule => "* * * * *"# 如果sql语句使用sql_last_value属性要设置use_column_value为true,并且指定tracking_column属性,指定哪一列use_column_value => true# 指定sql_last_value参数使用哪一列tracking_column => "create_time"# 设置tracking_column属性名保存的状态last_run_metadata_path => "D:\\soft\\logstash-6.3.2\\a\\a.txt"# 是否保留前一次的运行状态,如果不保留下次重启服务器所以会被重新创建clean_run => false# 设置时间戳tracking_column_type => "timestamp"# 生成索引的数据来源statement => "SELECT * FROM department WHERE create_time > :sql_last_value AND create_time < now() ORDER BY create_time desc"}# 第2张表jdbc{# 设置当前jdbc的typetype => "student"# 数据库驱动地址jdbc_driver_library => "D:\\soft\\logstash-6.3.2\\lib\\mysql-connector-java-5.1.47.jar" # 数据库驱动类名jdbc_driver_class => "com.mysql.jdbc.Driver"# 数据库连接地址jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/gn_oa"# 数据库用户名jdbc_user => "root"# 数据库密码jdbc_password => "root"# 定时任务,一分钟同步一次schedule => "* * * * *"# 如果sql语句使用sql_last_value属性要设置use_column_value为trueuse_column_value => true# 指定sql_last_value参数使用哪一列tracking_column => "create_time"# 设置tracking_column属性名保存的状态last_run_metadata_path => "D:\\soft\\logstash-6.3.2\\b\\b.txt"# 是否保留前一次的运行状态,如果不保留下次重启服务器所以会被重新创建clean_run => false# 设置时间戳tracking_column_type => "timestamp"# 生成索引的数据来源statement => "SELECT * FROM student WHERE create_time > :sql_last_value AND create_time < now() ORDER BY create_time desc"}}output{# 根据jdbc中的type值指定输入的jdbc对应的输出为哪一个elasticsearchif[type]=="department"{elasticsearch{# 集群地址hosts => ["127.0.0.1:9200","127.0.0.1:9201","127.0.0.1:9202"]# 索引名称index => "department"# 生成根据dept_id,生成ES的 _iddocument_id => "%{dept_id}"# 类型document_type => "dept_doc"}}if[type]=="student"{elasticsearch{# 集群地址hosts => ["127.0.0.1:9200","127.0.0.1:9201","127.0.0.1:9202"]# 索引名称index => "student"# 生成根据student_id,生成ES的 _iddocument_id => "%{student_id}"# 类型document_type => "student_doc"}}}

2 使用其他字段进行追踪(设置使用主键进行追踪)

1
在修改其他字段进行追踪时,一定不要忘记修改tracking_column_type类型,详情修改请参官网
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
input{# 第1张表jdbc{# 设置当前jdbc的typetype => "department"# 数据库驱动地址jdbc_driver_library => "D:\\soft\\logstash-6.3.2\\lib\\mysql-connector-java-5.1.47.jar" # 数据库驱动类名jdbc_driver_class => "com.mysql.jdbc.Driver"# 数据库连接地址jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/gn_oa"# 数据库用户名jdbc_user => "root"# 数据库密码jdbc_password => "root"# 定时任务,一分钟同步一次schedule => "* * * * *"# 如果sql语句使用sql_last_value属性要设置use_column_value为true,并且指定tracking_column属性,指定哪一列use_column_value => true# 指定sql_last_value参数使用哪一列tracking_column => "dept_id"# 设置tracking_column属性名保存的状态last_run_metadata_path => "D:\\soft\\logstash-6.3.2\\a\\a.txt"# 是否保留前一次的运行状态,如果不保留下次重启服务器所以会被重新创建clean_run => false# 设置列的类型tracking_column_type => "numeric"# 生成索引的数据来源statement => "SELECT * FROM department WHERE dept_id > :sql_last_value"}# 第2张表jdbc{# 设置当前jdbc的typetype => "student"# 数据库驱动地址jdbc_driver_library => "D:\\soft\\logstash-6.3.2\\lib\\mysql-connector-java-5.1.47.jar" # 数据库驱动类名jdbc_driver_class => "com.mysql.jdbc.Driver"# 数据库连接地址jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/gn_oa"# 数据库用户名jdbc_user => "root"# 数据库密码jdbc_password => "root"# 定时任务,一分钟同步一次schedule => "* * * * *"# 如果sql语句使用sql_last_value属性要设置use_column_value为trueuse_column_value => true# 指定sql_last_value参数使用哪一列tracking_column => "student_id"# 设置tracking_column属性名保存的状态last_run_metadata_path => "D:\\soft\\logstash-6.3.2\\b\\b.txt"# 是否保留前一次的运行状态,如果不保留下次重启服务器所以会被重新创建clean_run => false# 设置列的类型tracking_column_type => "numeric"# 生成索引的数据来源statement => "SELECT * FROM student WHERE student_id > :sql_last_value"}}output{# 根据jdbc中的type值指定输入的jdbc对应的输出为哪一个elasticsearchif[type]=="department"{elasticsearch{# 集群地址hosts => ["127.0.0.1:9200","127.0.0.1:9201","127.0.0.1:9202"]# 索引名称index => "department"# 生成根据dept_id,生成ES的 _iddocument_id => "%{dept_id}"# 类型document_type => "dept_doc"}}if[type]=="student"{elasticsearch{# 集群地址hosts => ["127.0.0.1:9200","127.0.0.1:9201","127.0.0.1:9202"]# 索引名称index => "student"# 生成根据student_id,生成ES的 _iddocument_id => "%{student_id}"# 类型document_type => "student_doc"}}}

注意: 日常bug记录与采坑指南,如果出现下面的BUG并且在进行配置查找的时候,无论怎么校验都不能从自己的配置中找到错误,但是服务器还启动不起来,那么可以尝试在错误信息中查找关键信息,经过反复校验,如果设置了last_run_metadata_path服务器可以正常启动,如果配置中少了last_run_metadata_path 属性服务器启动失败,就会报如下错误,并且在下面的错误中,有相关信息,我的报错信息如下,关键信息last_run_metadata_path=>"C:\\Users\\lenovo/.logstash_jdbc_last_run",说明在上次发生错的时候logstash对我上次的错误信息进行的保存,造成服务器每次启动读取错误信息,造成的服务器启动失败,去指定位置删除即可.

123
[2020-08-20T02:27:40,897][ERROR][logstash.pipeline        ] Error registering plugin {:pipeline_id=>"main", :plugin=>"\"D:\\\\\\\\soft\\\\\\\\logstash-6.3.2\\\\\\\\lib\\\\\\\\mysql-connector-java-5.1.47.jar\", jdbc_driver_class=>\"com.mysql.jdbc.Driver\", jdbc_connection_string=>\"jdbc:mysql://127.0.0.1:3306/gn_oa\", jdbc_user=>\"root\", jdbc_password=>, schedule=>\"* * * * *\", statement=>\"SELECT * FROM department\", id=>\"02efb29127a061192768f52b1a09e6638672c521b53edda48b19f6b9880e90d6\", enable_metric=>true, codec=>\"plain_e50f7aa8-3c57-4f33-9000-86265d442ec7\", enable_metric=>true, charset=>\"UTF-8\">, jdbc_paging_enabled=>false, jdbc_page_size=>100000, jdbc_validate_connection=>false, jdbc_validation_timeout=>3600, jdbc_pool_timeout=>5, sql_log_level=>\"info\", connection_retry_attempts=>1, connection_retry_attempts_wait_time=>0.5, last_run_metadata_path=>\"C:\\\\Users\\\\lenovo/.logstash_jdbc_last_run\", use_column_value=>false, tracking_column_type=>\"numeric\", clean_run=>false, record_last_run=>true, lowercase_column_names=>true>", :error=>"can't dup Fixnum", :thread=>"#"}[2020-08-20T02:27:41,426][ERROR][logstash.pipeline        ] Pipeline aborted due to error {:pipeline_id=>"main", :exception=>#, :backtrace=>["org/jruby/RubyKernel.java:1882:in `dup'", "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/date/format.rb:838:in `_parse'", "uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/date.rb:1830:in `parse'", "D:/soft/logstash-6.3.2/vendor/bundle/jruby/2.3.0/gems/logstash-input-jdbc-4.3.9/lib/logstash/plugin_mixins/value_tracking.rb:87:in `set_value'", "D:/soft/logstash-6.3.2/vendor/bundle/jruby/2.3.0/gems/logstash-input-jdbc-4.3.9/lib/logstash/plugin_mixins/value_tracking.rb:36:in `initialize'", "D:/soft/logstash-6.3.2/vendor/bundle/jruby/2.3.0/gems/logstash-input-jdbc-4.3.9/lib/logstash/plugin_mixins/value_tracking.rb:29:in `build_last_value_tracker'", "D:/soft/logstash-6.3.2/vendor/bundle/jruby/2.3.0/gems/logstash-input-jdbc-4.3.9/lib/logstash/inputs/jdbc.rb:216:in `register'", "D:/soft/logstash-6.3.2/logstash-core/lib/logstash/pipeline.rb:340:in `register_plugin'", "D:/soft/logstash-6.3.2/logstash-core/lib/logstash/pipeline.rb:351:in `block in register_plugins'", "org/jruby/RubyArray.java:1734:in `each'", "D:/soft/logstash-6.3.2/logstash-core/lib/logstash/pipeline.rb:351:in `register_plugins'", "D:/soft/logstash-6.3.2/logstash-core/lib/logstash/pipeline.rb:498:in `start_inputs'", "D:/soft/logstash-6.3.2/logstash-core/lib/logstash/pipeline.rb:392:in `start_workers'", "D:/soft/logstash-6.3.2/logstash-core/lib/logstash/pipeline.rb:288:in `run'", "D:/soft/logstash-6.3.2/logstash-core/lib/logstash/pipeline.rb:248:in `block in start'"], :thread=>"#"}[2020-08-20T02:27:41,467][ERROR][logstash.agent           ] Failed to execute action {:id=>:main, :action_type=>LogStash::ConvergeResult::FailedAction, :message=>"Could not execute action: PipelineAction::Create
,

来源地址:https://blog.csdn.net/Andrew_Chenwq/article/details/128722692

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯