ElasticSearch
ElasticSearch 简介
Elasticsearch是一个分布式、可扩展、实时的搜索与数据分析引擎。它可以让您快速且近实时地存储,检索以及分析海量数据。它通常用作那些具有复杂搜索功能和需求的应用的底层引擎或者技术。
全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。
Elasticsearch的底层是开源库吧Lucene。但是,你没法直接用,必须自己写代码调用它的接口,Elastic 是 Lunce 的封装,提供了 REST API 的操作接口,开箱即用。
官方文档:点我传送
官方中文文档:点我传送
ElasticSearch 概念
- 索引
- 类型
- 文档
- 属性
- 倒排索引表
ElasticSearch quick start
docker安装ElasticSearch Kibana
# 存储和检索数据
docker pull elasticsearch:7.4.2
# 可视化检索数据
docker pull kibana:7.4.2
至少保证内存可用量为300+,越多越好
# 查看可用内存大小
free -m
创建实例
ElasticSearch
# 创建elasticsarch的config
mkdir -p /mydata/elasticsearch/config
# 创建elasticsarch的data
mkdir -p /mydata/elasticsearch/data
# 配置elasticsearch.yml
# 注: 'host:'中 ':'后跟着空格
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
# 设置elasticsearch目录权限
chmod -R 777 /mydata/elasticsearch/
# 启动elasticsearch
# 特别注意:-e ES_JAVA_OPTS="-Xms64m -Xmx256m" 测试环境下,设置ES的初始内存和最大内存,否则导致过大启动不了 ES
docker run --name elasticsearch -p 9200:9200 -p 9300:9300
-e "discovery.type=single-node"
-e ES_JAVA_OPTS="-Xms64m -Xmx512m"
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins
-d elasticsearch:7.4.2
# 当 Docker 重启时,容器能自动启动
docker update elasticsearch --restart=always
docker restart elasticsearch
访问 ip:9200
# 查看虚拟机ip
ip addr
# 访问 ip:9200
192.168.188.128:9200
Kibana
启动kibana时有两种方式,任选其一。如果是通过docker使用kibana,则直接执行方式二。
方式一:
# 启动kibana
# ELASTICSEARCH_HOSTS 一定改为自己虚拟机的地址
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.188.128:9200 -p 5601:5601
-d kibana:7.4.2
# 当 Docker 重启时,容器能自动启动
docker update kibana --restart=always
docker restart kibana
访问 ip:5601
# 查看虚拟机ip
ip addr
# 访问 ip:5601
192.168.188.128:5601
方式二:
# 查看docker中elasticSearch的ip
# 查看 es 实例暴露的IP
docker inspect elasticsearch
# 重新创建实例
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200
-p 5601:5601 -d kibana:7.4.2
# 当 Docker 重启时,容器能自动启动
docker update kibana --restart=always
docker restart kibana
ElasticSearch 使用
_cat
# 查看所有节点
http://192.168.188.128:9200/_cat/nodes
# 查看 es 健康状况
http://192.168.188.128:9200/_cat/health
# 查看主节点
http://192.168.188.128:9200/_cat/master
# 查看所有索引
http://192.168.188.128:9200/_cat/indices
新增数据
elasticsearch通过接收PUT和POST请求来新增数据,然而在新增数据之前,我们需要来了解elasticsearch中的几个概念:
- 索引
- 类型
- 文档
- 属性
在elasticsearch中新增数据称其为 索引一个文档
问题汇总
问题一:
通过docker logs [容器id]查看日志,如果出现以下错误:
{.. "message" : "Unable to revive connection: http://ip:9200/"}
错误原因:
Docker容器中启动服务和直接在Linux环境下安装服务,会有ip上的区别,不在是服务器的物理ip,而是容器对外暴露对的ip。简单来说,需要设置kibana的ElasticSearch Ip为docker容器的ip,而不是物理机的Ip。
解决方法:查看启动kibana方式二
通过docker inspect elasticsearch查看ES实例暴露出来的ip 。停止并删除现有的Kibana容器,然后重新启动kibana并添加环境变量参数:-e ELASTICSEARCH_HOSTS="http://es暴露的IP:9200"
# 停止实例
docker stop kibana
# 删除实例
docker rm kibana
# 查看 es 实例暴露的IP
docker inspect elasticsearch
# 重新创建实例
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200
-p 5601:5601 -d kibana:7.4.2
问题二:
打开网址一直显示以下页面 :
Kibana server is not ready yet
错误原因:
Docker容器中启动服务和直接在Linux环境下安装服务,会有ip上的区别,不在是服务器的物理ip,而是容器对外暴露对的ip。简单来说,需要设置kibana的ElasticSearch Ip为docker容器的ip,而不是物理机的Ip。
解决方法:查看启动kibana方式二
通过docker inspect elasticsearch查看ES实例暴露出来的ip 。停止并删除现有的Kibana容器,然后重新启动kibana并添加环境变量参数:-e ELASTICSEARCH_HOSTS="http://es暴露的IP:9200"
# 停止实例
docker stop kibana
# 删除实例
docker rm kibana
# 查看 es 实例暴露的IP
docker inspect elasticsearch
# 重新创建实例
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200
-p 5601:5601 -d kibana:7.4.2