简介

ElasticSearch(简称ES)天然支持分布式,具备存储海量数据的能力,其搜索和数据分析的功能都建立在ElasticSearch存储的海量的数据之上。目前主要用于大量数据的挖掘和搜索。使用的优势是在数据量较大的时候可以进行快速搜索,并且本身还带有分词器,可以对elasticSearch内的数据进行分词搜索。有利于数据管理。

es优缺点:

优点:

1.存储优化:紧凑的结构,通过对词典中单词前缀和后缀的重复利用,压缩了存储空间。它有着字典树的查询时间复杂度,但是由于做了后缀合并会更节约内存。
2.联合查询优化:若要对多个term做联合查询,比如做AND来查询,实际上便是联合各个term产生的跳表Skip-list做查询
3.算法:ES数据库中集成了数据分析器Analyzer,例如Charater Filter(特殊字符替换) -> Tokenizer(分词) -> Token Filter(每个词处理)在数据分析,自然语言处理中非常常见
4.es支持集群模式:ES数据库集群化,分片,主从备份机制,容灾能力,可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据

缺点:

1.浪费空间:由于ES数据库采用文档Id分布,当文档很稀疏时,将会很浪费空间
2.在需要添加新数据与新字段的时候,如果elasticSearch进行搜索是可能需要重新修改格式。之前的数据需要重新同步,对数据的管理有很多困难。

1.安装ElasticSearch

拉取镜像:

docker pull elasticsearch:7.7.0

启动容器:

docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9002:9200 -p 9300:9300 elasticsearch:7.7.0

安装分词器:

下载安装包:
宿主机里面下载:

wget  https://link.csdn.net/?target=https%3A%2F%2Fgithub.com%2Fmedcl%2Felasticsearch-analysis-ik%2Freleases%2Fdownload%2Fv7.7.0%2Felasticsearch-analysis-ik-7.7.0.zip

将分词器拷贝到容器内部:

# 进入容器内
docker exec -it elasticsearch /bin/bash
# 在plugins目录下创建ik目录
mkdir ./ik
docker cp /home/elasticsearch-analysis-ik-7.7.0.zip elasticsearch:/usr/share/elasticsearch/plugins/ik/
# 再次进入镜像进行 解压
docker exec -it elasticsearch /bin/bash
cd /usr/share/elasticsearch/plugins/ik/
unzip elasticsearch-analysis-ik-7.7.0.zip 

退出容器,重启容器。

访问:

120.48.54.67(安装es的ip):9002(启动docker容器时的端口号)
在这里插入图片描述

2.安装ElasticSearch-Head(elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。)

拉取镜像

docker pull mobz/elasticsearch-head:5

启动容器:

docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5

访问:

120.48.54.67:9100
在这里插入图片描述

3.配置ElasticSearch跨域问题。

ElasticSearch-Head中创建索引,这里可看到索引、类型、字段、数据信息。
在这里插入图片描述

访问请求:http://localhost:9100/ :发现集群健康值是灰色,访问不到ElasticSearch 服务,是因为存在跨域问题。

进入容器:

docker exec -it elasticsearch /bin/bash

修改配置文件vi config/elasticsearch.yml即可。

http.cors.enabled: true
http.cors.allow-origin: "*"

将上边俩行写进配置文件中,注意这里是用yml的配置文件,简单普及一下此类配置文件的几点语法。

冒号后边必须有一个空格
使用空格的缩进标识层级关系,空格数据不重要,只要是左边对其的一列键即可。
对大小写十分敏感
缩进时不允许使用tab,只允许使用空格。
配置修改完后需执行命令exit退出容器,接着执行docker restart 容器ID重启容器即可。

在这里插入图片描述

如果跨域问题解决了,但是新建索引还是没有反应,点击页面f12 发现请求406了。

处理报406错误

将容器中的配置文件拷贝到宿主机上面

docker cp elasticsearch-head:/usr/src/app/_site/vendor.js /usr/local/

进入到/usr/local即可看到从容器中复制出来的文件vendor.js。
修改文件第6886、7574行,将"application/x-www-from-urlencodes"修改为"application/json;charset=UTF-8"即可

将修改好的配置文件复制到容器内

docker cp /usr/local/vendor.js elasticsearch-head:/usr/src/app/_site

重启容器,再次刷新访问。

我们就把head当做数据展示工具,至于查询的实现,用 Kibana 实现效果更好。

4.安装Kibana 用于查询

拉取镜像:

找到与elasticsearch 对应的版本

docker pull kibana:7.7.0

启动容器:

docker run -it -d -e ELASTICSEARCH_URL=http://120.48.54.67:9002 --name kibana --restart=always -p 5601:5601 kibana:7.7.0

ELASTICSEARCH_URL选择你的elasticsearch 地址。

进入容器:

docker exec -it 容器ID /bin/sh
#使用vi 修改文件内容
vi /usr/share/kibana/config/kibana.yml 

如果没有vim命令先更新

apt-get update
apt-get install vim

按i 进入修改,将如下内容写到kibana.yml中,然后保存退出::wq
elasticsearch.hosts 改成你的es 地址:

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://120.48.54.67:9002" ]
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN

退出容器,重启容器。

访问

120.48.54.67:5601
在这里插入图片描述
如果长时间都是下图那样服务器没准备好,可以看下日志排查问题:
在这里插入图片描述

#查看kibana容器日志
docker logs -f 容器ID

最终效果:

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐