ElasticSearch安装
声明:JDK1.8 ,最低要求! ElasticSearch 客户端,界面工具!
Java开发,ElasticSearch 的版本和我们之后对应的 Java 的核心jar包! 版本对应!JDK 环境是正常
下载地址:ElasticSearch官网下载
官网下载巨慢,翻墙,网盘中下载即可
crul命令
访问一个网页
curl www.baidu.com
curl -o tt.html www.baidu.com
显示相应头信息
curl -i www.baidu.com
显示一次HTTP请求的通信过程
curl -v www.baidu.com
执行GET/POST/PUT/DELETE操作
curl -X GET/POST/PUT/DELETE url
window 下安装!
1.解压就可以使用了!
2.熟悉项目
bin 启动文件
config 配置文件
log4j2 日志配置文件
jvm.options java 虚拟机相关的配置
elasticsearch.yml elasticsearch 的配置文件! 默认 9200 端口! 跨域!
lib 相关jar包
logs 日志!
modules 功能模块
plugins 插件!
-
启动之后会开启9200 和9300端口
ElasticSearch的9200和9300端口的区别
9200用于外部通讯,基于http协议,程序与es的通信使用9200端口。
9300jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9300端口进行通信。
- 浏览器查看
安装ES的图像化界面插件
1.下载head插件:
将elasticsearch-head-master压缩包解压到任意目录,但是要和elasticsearch安装目录区别开
2. 安装nodejs
- 下载对应你系统的Node.js版本https://nodejs.org/en/download/
可以通过cmd控制台输入: node -v 查看版本号
启动grunt server
- 安装cnpm提示下载速度
1. *//在node中执行*
2. npm install -g cnpm --registry=https:*//registry.npm.taobao.org*
- 直接启动会报错,需将grunt安装为全局命令, Grunt是基于Node.js的项目构建工具
D:\install\elasticsearch\elasticsearch-head-master\elasticsearch-head-master>npm install -g grunt-cli
-
grunt server出现错误error:Unable to find local grunt
解决方法:进入elasticsearch-head-master启动head,输入命令
npm install
grunt serve 或 npm run start
- 出现下图表示成功
3.连接elasticsearch
打开浏览器,输入http://localhost:9100,看到如下页面:
4、解决跨域问题
连接测试发现,存在跨域问题:需要修改ElasticSearch的config目录下的配置文件:config/elasticsearch.yml,增加以下两句命令:
http.cors.enabled: true
http.cors.allow.origin: "*"
然后重启ElasticSearch服务。
初学,就把es当做一个数据库! (可以建立索引(库),文档(库中的数据!))
这个head我们就把它当做数据展示工具!我们后面所有的查询,Kibana!
了解 ELK
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为Elastic
Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框
架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可
见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK
的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出
到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好
的页面展示出来,提供实时分析的功能。
市面上很多开发只要提到ELK能够一致说出它是一个日志分析架构技术栈总称,但实际上ELK不仅仅适用
于日志分析,它还可以支持其它任何数据分析和收集的场景,日志分析和收集只是更具有代表性。并非
唯一性。
安装kibana
Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索
引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理
解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查
询动态。设置Kibana非常简单。无需编码或者额外的基础架构,几分钟内就可以完成Kibana安装并启动
Elasticsearch索引监测。
kibana官网
Kibana 版本要和 Es 一致!
下载完毕后,解压也需要一些时间!是一个标准的工程!
好处:ELK 基本上都是拆箱即用!
启动测试
1、解压后端的目录
- 启动(5601端口)
- 访问测试
- 开发工具! (Post、curl、head、谷歌浏览器插件测试!)
- 汉化!自己修改kibana配置即可! zh-CN!
linux下安装!
- 保证jdk1.8以上,设置环境变量
- 不能用root用户启动
解决方法:启动时./elasticsearch -Des.insecure.allow.root=true
或 修改bin/elasticsearch,加上ES_JAVA_OPTS属性:ES_JAVA_OPTS="-Des.insecure.allow.root=true" 该方法貌似没用
使用非root用户启动和停止
# 添加用户组
groupadd eszu
useradd esyonghu -g eszu -p 123456
# 进入到es安装目录
chown -R esyonghu:eszu elasticsearch-6.2.4
su esyonghu
# 进入安装目录的bin下 后台启动
./elasticsearch -d
# 查看
curl 127.0.0.1:9200
若启动出现以杀死 需要调整JVM的内存:
ES_JAVA_OPTS="-Xms512 -Xmx512m"
- 处理第一个错误:
vim /etc/security/limits.conf
文件最后加入
esyonghu soft nofile 65536
esyonghu hard nofile 65536
esyonghu soft nproc 4096
esyonghu hard nproc 4096
-
处理第二个错误:
进入limits.d目录修改配置文件
vim /etc/security/limits.d20-nproc.conf
修改为esyonghu soft nproc 4096
-
处理第三个错误:
vim /etc/sysctl.conf
vm.max_map_count=655360
执行以下命令生效: sysctl -p
修改 config下ip
network.host:10.60.0.22
http.port:9200
关闭防火墙:
systemctl stop firewall.service
安装中文分词器ik
下载ik 版本和es的一致
先安装mvn
mvn -v
cd /usr/local/elasticsearch-analysic-ik-master 编译
mvn clean install -Dmaven.test.skip=true
之后会在target/relleases/ 下生成zip包
把zip包放到es的plugins/ik下 (mkdir ik),解压zip后会生成elasticsearch文件夹 ,还需要把里面的东西直接放到ik文件夹下
mv elasticsearch/* ./
rm -rf ./elasticsearch
安装Head插件
先装git和 node
再从github上下载head
npm install -g grunt-cli
# 进入head目录下 安装
cnpm install
vi Gruntfile.js
在connect-->server-->option下面添加:hostname:"*", 允许所有ip可以访问
vi /usr/local/elasticsearch-head/_site/app.js
将this.base_uri=this.confg.base_uri||this.prefs.get("app-base_uri")||"http://localhost:9200";中的localhost修改成你es的服务器地址
解决跨域问题
连接测试发现,存在跨域问题:需要修改ElasticSearch的config目录下的配置文件:config/elasticsearch.yml,增加以下两句命令:
http.cors.enabled: true
http.cors.allow.origin: "*"
# 开启防火墙
systemctl start firewalld.service
# 打开head端口9100
firewall-cmd --zone=public --add-port=9100/tcp --permanent
# 重启防火墙
firewall-cmd --reload
启动elasticsearch
启动elasticsearch-head
cd /usr/local/elastcisearch-head/node_modules/grunt/bin/grunt server
关闭防火墙:
systemctl stop firewall.service
访问head
安装kibana
下载kibana解压后
进入 /usr/local/kibana/config
server.host: "192.168.25.133"
elasticsearch.url: "http://192.168.25.133:9200"
kibana默认端口为5601
# 开启防火墙
systemctl start firewalld.service
# 打开head端口9100
firewall-cmd --zone=public --add-port=5601/tcp --permanent
# 重启防火墙
firewall-cmd --reload
启动kibana
进入安装目录下bin中启动
./kibana
浏览器访问:http://192.168.25.133:5601
ES的核心概念
1、索引
2、字段类型(mapping)
3、文档(documents)
参考网盘文档
IK分词器插件
什么是IK分词器?
分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把
数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个
词,比如 “我爱狂神” 会被分为"我",“爱”,“狂”,“神”,这显然是不符合要求的,所以我们需要安装中文分词
器ik来解决这个问题。
如果要使用中文,建议使用ik分词器!
IK提供了两个分词算法:ik_smart 和 ik_max_word,其中 ik_smart 为最少切分,ik_max_word为最细
粒度划分!一会我们测试!
安装
1、下载ik
2、下载完毕之后,放入到我们的elasticsearch 插件即可!
3、重启观察ES,可以看到ik分词器被加载了!
4、elasticsearch-plugin 可以通过这个命令来查看加载进来的插件
命令 elasticsearch-plugin list
5、使用kibana测试!(添加ik插件后重启kibanan)
查看不同的分词效果
其中ik_smart为最少切分
GET _analyze
{
"analyzer": "ik_smart",
"text": "中国共产党狂神说"
}
ik_max_word为最细粒度划分!穷尽词库的可能!字典!
发现问题:狂神说被拆开了!
这种自己需要的词,需要自己加到我们的分词器的字典中!
ik 分词器增加自己的配置!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eUAx5Qq2-1593345925082)(安装ES的图像化界面插件.assets/image-20200628093109835.png)]
关闭es 和kibana 重启es,可以看到kuang.dic被加载了
可以看到2种查询方式都没有分开狂神说
Rest风格说明
一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交
互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
基本Rest命令说明:
method | url地址 | 描述 |
---|---|---|
PUT | localhost:9200/索引名称/类型名称/文档id | 创建文档(指定文档id) |
POST | localhost:9200/索引名称/类型名称 | 创建文档(随机文档id) |
POST | localhost:9200/索引名称/类型名称/文档id/_update | 修改文档 |
DELETE | localhost:9200/索引名称/类型名称/文档id | 删除文档 |
GET | localhost:9200/索引名称/类型名称/文档id | 查询文档通过文档id |
POST | localhost:9200/索引名称/类型名称/_search | 查询所有数据 |
关于索引的基本操作
1、创建一个索引!
PUT /索引名/~类型名~/文档id
{请求体}
完成了自动增加了索引!数据也成功的添加了,这就是我说大家在初期可以把它当做数据库学习的原
因!
3、那么 name 这个字段用不用指定类型呢。毕竟我们关系型数据库 是需要指定类型的啊 !
字符串类型
- text 、 keyword
- 数值类型
long, integer, short, byte, double, float, half_float, scaled_float - 日期类型
date - te布尔值类型
boolean - 二进制类型
binary
等等…
4、指定字段的类型
PUT /test2
{
"mappings": {
"properties":{
"name":{
"type": "text"
},
"age":{
"type": "long"
},
"birthday":{
"type": "date"
}
}
}
}
获得这个规则! 可以通过 GET 请求获取具体的信息!
GET test2
5、查看默认的信息
_doc为默认类型(推荐使用)
PUT /test3/_doc/1
{
"name":"狂神说",
"age":13,
"birth":"1997-01-05"
}
- 如果自己的文档字段没有指定,那么es 就会给我们默认配置字段类型!
扩展: 通过命令 elasticsearch 索引情况! 通过get _cat/ 可以获得es的当前的很多信息!
GET _cat/indices?v
修改 提交还是使用PUT 即可! 然后覆盖!最新办法!
曾经!和 现在的方法!
删除索引
通过DELETE 命令实现删除、 根据你的请求来判断是删除索引还是删除文档记录!
使用RESTFUL 风格是我们ES推荐大家使用的!
DELETET test1
关于文档的基本操作(重点)
参考文档
基本操作
1.添加数据
PUT /kuangshen/user/1
{
"name": "狂神说",
"age": 23,
"desc": "一顿操作猛如虎,一看工资2500",
"tags": ["技术宅","温暖","直男"]
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-szsFdFuD-1593345925086)(安装ES的图像化界面插件.assets/image-20200628145212854.png)]2、获取数据 GET
GET kuangshen/user/1
3、更新数据 PUT
4、Post _update , 推荐使用这种更新方式!
5.简单地搜索!
GET kuangshen/user/1
简单的条件查询,可以根据默认的映射规则,产生基本的查询!
6.复杂操作搜索 select ( 排序,分页,高亮,模糊查询,精准查询!)
输出结果,不想要那么多!
排序
分页
数据下标还是从0开始的,和学的所有数据结构是一样的!
/search/{current}/{pagesize}
布尔值查询
must (and),所有的条件都要符合 where id = 1 and name = xxx
should(or),所有的条件都要符合 where id = 1 or name = xxx
must_not (not)
过滤器 filter
- gt 大于
- gte 大于等于
- lt 小于
- lte 小于等于!
匹配多个条件!
精确查询!
term 查询是直接通过倒排索引指定的词条进程精确查找的!
关于分词:
- term ,直接查询精确的
- match,会使用分词器解析!(先分析文档,然后在通过分析的文档进行查询!)
两个类型 text keyword
多个值匹配精确查询
高亮查询!
这些其实MySQL 也可以做,只是MySQL 效率比较低!
- 匹配
- 按照条件匹配
- 精确匹配
- 区间范围匹配
- 匹配字段过滤
- 多条件查询
- 高亮查询
集成SpringBoot
1、找到原生的依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>
2、找对象
3、分析这个类中的方法即可!
配置基本的项目
问题:一定要保证 我们的导入的依赖和我们的es 版本一致
HnNR-1593345925098)]
高亮查询!
[外链图片转存中…(img-5LQlKuZE-1593345925099)]
这些其实MySQL 也可以做,只是MySQL 效率比较低!
- 匹配
- 按照条件匹配
- 精确匹配
- 区间范围匹配
- 匹配字段过滤
- 多条件查询
- 高亮查询
集成SpringBoot
1、找到原生的依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.2</version>
</dependency>
2、找对象
3、分析这个类中的方法即可!
配置基本的项目
问题:一定要保证 我们的导入的依赖和我们的es 版本一致