官⽹:https://www.elastic.co/cn/
包含了数据的整合 => 提取 => 存储 => 使⽤,⼀整套!
beats:从各种不同类型的⽂件 / 应⽤来 采集数据 a,b,c,d,e,aa,bb,cc
Logstash:从多个采集器或数据源抽取 / 转换数据,向 es 输送 aa,bb,cc
elasticsearch:存储、查询数据
kibana:可视化 es 的数据
1、安装 ES
elasticsearch:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/setup.html kibana:https://www.elastic.co/guide/en/kibana/7.17/introduction.html 只要是⼀套技术,所有版本必须⼀致!!!此处⽤ 7.17
2、Elasticsearch 概念
你就把 Elasticsearch 当成 MySQL ⼀样的数据库。 Index 索引 => MySQL ⾥的表(table) 建表、增删改查(查询需要花费的学习时间最多) ⽤客户端去调⽤ Elasticsearch(3种) 语法:SQL、代码的⽅法(4种语法) ES 相⽐于 MySQL,能够⾃动帮我们做分词,能够⾮常⾼效、灵活的查询内容。
3、索引(倒排索引)
正向索引:理解为数据的⽬录,可以快速帮你找到对应的内容(怎么根据⻚码找到⽂章)
倒排索引:怎么根据内容找到⽂章
ES 先切词, 去倒排索引表找对饮的⽂章:⽂章A,B
4、操作步骤
1. 下载 elasticsearch 和 kibana 的zip包,下载完成后解压出来
elasticsearch:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.9- windows-x86_64.zip
kibana:https://artifacts.elastic.co/downloads/kibana/kibana-7.17.9-windows-x86_64.zip
1. 启动 elasticsearch 在 bin ⽬录下运⾏ .\bin\elasticsearch.bat
1. 启动 kibana.bat 在 bin ⽬录下运⾏ .\bin\kibana.bat
ES 的⼏种调⽤⽅式
1)restful api 调⽤(http 请求) GET 请求:http://localhost:9200
可以模拟发送请求: curl -X GET "localhost:9200/?pretty"
ES 的启动端⼝:
1. 9200:给外部⽤户(给客户端调⽤)的端⼝
2. 9300:给 ES 集群内部通信的(外部调⽤不了的)
2)kibana devtools ⾃由的对 ES 进⾏操作(本质也是 restful api) devtools 不建议⽣产环境使⽤
3)客户端调⽤ java 客户端、go 客户端 https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/7.17/_getting_started.html
访问 kibana
1. 访问端⼝:http://localhost:5601/app/integrations/browse
5、语法:DSL
json格式,好理解,和 http 请求最兼容,应⽤最⼴,也是我个⼈⽐较推荐的
查询
DSL语法:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl.html(忘了就 查,不⽤背)
语法:SQL
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/sql-getting-started.html 学习成本低,但是可能需要插件⽀持、性能较差
语法:Painless Scripting language
编程式取值,更灵活,但是学习成本⾼
Mapping
理解为数据库的表结构,有哪些字段、字段类型
ES ⽀持动态 mapping,表结构可以动态改变,⽽不像 MySQL ⼀样必须⼿动建表,没有的字段就 不能插⼊
6、分词器
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/test-analyzer.html
分词的⼀种规则
内置分词器:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/analysisanalyzers.html 空格分词器:whitespace,结果:The、quick、brown、fox.
IK 分词器(ES 插件)
中⽂友好:https://github.com/medcl/elasticsearch-analysis-ik
下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.17.7(注意版本 ⼀致) 思考:怎么样让 ik 按⾃⼰的想法分词? 回答:⾃定义词典
步骤
1. 在 elasticsearch-7.17.9 ⽬录下新建 plugins ⽬录
2. 在 plugins ⽬录下新建 ik ⽬录
3. 将下载的 zip 包解压到 ik ⽬录下
4. 将 elasticsearch-analysis-ik-7.17.7 ⽬录中的所有内容移到 ik ⽬录下
5. 重启 ES,发⽣错误:插件版本不匹配
解决⽅案:https://github.com/medcl/elasticsearch-analysis-ik/issues/996 下载相近的版本,解压后修改plugin-descriptor.properties⽂件⾥⾯的elasticsearch.version就可以。
修改后,ES 启动成功,重新在 kibana 中运⾏分词器测试,成功。 命令⾏中显示加载 ik 插件
6. 测试 ik_smart 分词器,结果
ES 调⽤⽅式
Java 操作 ES
3 种: 1. ES 官⽅的 Java API https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/7.17/introduction.html 快速开始:https://www.elastic.co/guide/en/elasticsearch/client/java-apiclient/7.17/connecting.html
2. ES 以前的官⽅ Java API,HighLeavelRestClient(已废弃,不建议⽤)
3. Spring Data Elasticsearch spring-data 系列:spring 提供的操作数据库的框架
spring-data-redis:操作 redis 的⼀套⽅法 spring-data-mongodb:操作 mongodb的⼀套⽅法 spring-data-elasticsearch:操作 elasticsearch 的⼀套⽅法
官⽅⽂档:https://docs.spring.io/spring-data/elasticsearch/docs/4.4.10/reference/html/ ⾃定义⽅法: ⽤户可以指定接⼝的⽅法名称,框架帮你⾃动⽣成查询