1 介绍
Elasticsearch是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。
它用于全文搜索、结构或搜索、分析以及将这三者混合使用
搜索纠错、实时反馈

2 ELK安装
环境:
- JDK1.8 最低要求
- Java开发、ElasticSearch的版本和我们之后对应的Java的核心jar包。
官网:https://www.elastic.co/cn
下载:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-6-2
我们在windows下演示
ELK三剑客,解压即用:
2.1 Elasticearch安装
2.1.1 windows 安装

bin 启动文件
config 配置文件
log4j2 日志配置文件
jvm.options java 虚拟机相关配置
elasticsearch.yml elasticsearch配置文件 默认9200端口!有跨域问题
lib 相关jar包
logs 日志
modules 功能模块
plugubs 插件 ik分词
启动:
bin/elasticsearch.bat
访问测试
http://127.0.0.1:9200/
{
"name" : "USERMIC-AQENDNF",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "SgT0Xh5-QvCHBwjnrlMhOw",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
2.1.2 linxu安装
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.2-linux-x86_64.tar.gz
2.2 可视化界面 elasticsearch-head
https://github.com/mobz/elasticsearch-head
1、配置elasticsearch
解决跨域问题:elasticsearch-7.6.2\config\elasticsearch.yml
文件尾部添加如下代码
http.cors.enabled: true
http.cors.allow-origin: "*"
2、启动elasticsearch-head
docker build -t elk-head .
2.3 安装 Kibana
官网:https://www.elastic.co/cn/kibana/

Kibana版本要和ES一致
1、启动
http://localhost:5601

2、汉化
国际化文件x-pack\plugins\translations\translations\zh-CN.json
修改配置:config/
kibana.yml
116行
i18n.locale: "zh-CN"
3 docker部署elk
docker命令:https://vitcloud.blog.csdn.net/article/details/122652560
下载:
https://github.com/deviantony/docker-elk/tree/release-7.x
http://localhost:9200/
http://localhost:5601/
3.1 基本配置
1. 启动
docker-compose up
默认用户名、密码
user
: elastic
password
: changeme
2 为内置用户初始化密码
docker-compose exec -T elasticsearch bin/elasticsearch-setup-passwords auto --batch
Changed password for user apm_system
PASSWORD apm_system = 40iHqszWXZuBHJUAO2rO
Changed password for user kibana_system
PASSWORD kibana_system = Mld3fRmxEmJy5mLwhbc2
Changed password for user kibana
PASSWORD kibana = Mld3fRmxEmJy5mLwhbc2
Changed password for user logstash_system
PASSWORD logstash_system = FEwag4dLfVJS6cVVZemn
Changed password for user beats_system
PASSWORD beats_system = S6L29ErIA3jigEQLTvnW
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = 7zWztQAFCoWytAA9VCDm
Changed password for user elastic
PASSWORD elastic = EtWvHc8lGh05YS7vS1mq
3 取消设置引导密码(可选)
docker-compose.yml
ELASTIC_PASSWORD
4 替换密码
kibana/config/kibana.yml
elasticsearch.username: elastic
elasticsearch.password: EtWvHc8lGh05YS7vS1mq
logstash/config/logstash.yml
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: EtWvHc8lGh05YS7vS1mq
logstash/pipeline/logstash.conf
output {
elasticsearch {
hosts => "elasticsearch:9200"
user => "elastic"
password => "EtWvHc8lGh05YS7vS1mq"
ecs_compatibility => disabled
}
}
重启服务
docker-compose restart kibana logstash
3.2 安装插件
1. 命令安装
在Dockerfile添加下面格式命令
RUN elasticsearch-plugin install analysis-icu
2. 手动安装
进入容器
docker exec -it e40bd5ee5f42 /bin/bash
宿主机解压好后,想容器复制插件
docker cp /usr/local/ik/ 容器名:/usr/share/elasticsearch/plugins
docker cp /usr/local/ik/ docker-elk_elasticsearch_1:/usr/share/elasticsearch/plugins
重启容器
docker restart 41e4c48f216c
4 ES核心概念
- 索引
- 字段类型(mapping)
- 文档
集群、节点、索引、类型、文档、分片、映射是什么?
elesticsearch是面向文档,关系行数据库和delecticsearch客观的对比
Relation DB |
Elasticsearch |
数据库 |
索引(indices) |
表(tables) |
types(逐渐弃用) |
行(rows) |
documents |
字段(columns) |
fields |
物理设计:
eleasticsearch在后台把每个索引分成多个分片,每分分片可以在集群中的不同服务器间迁移
文档
elasticsearch是面向文档的,name就意味着索引和搜索数据的做小单位是文档,在elasticsearch中,文档有以下几个重要属性。
- 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含key:value
- 可以使层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的。
- 灵活的结构,文档不依赖预先定义的模式,我们指导关系型数据库中,要提前定义字段才能使用,在elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个新的字段。
类型
映射类型
name: string test
birt: date
索引
就是数据库

一个集群至少有一个节点,而一个节点就是一个elasticsearch进程,节点可以有多个索引
如果创建索引,那么有5个分片(primary shard,又称主分片)构成的,每一个主分片会有一个副本(replic shard, 又称复制分片)
一个分片是一个Lucene索引
倒排索引
elesticsearch使用的是一种称为倒排索引的机构,采用Lucene倒排索作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个次,都有一个包含它的文档列表。
例如,现有两个文档,每个文档包含如下内容:
study every day, good good up to forever # 文档1
Tto forever, study erery day # 文档2


如果要搜索含有python标签的文章,那相对于查找的所有原始数据而言,查找倒排
5 IK分词器插件
什么事IK分词器?
分词:即把一段中文或者别的划分成一个个关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词。
IK提供了两个分词算法:ik_smart和ik_max_word,其中ik_smart为最少的切分,ik_max_word为最细力度划分。
1. 安装
注意版本
https://github.com/medcl/elasticsearch-analysis-ik

查看已加载的插件
elasticsearch-plugin.bat
elasticsearch-plugin list

# 最少切分
GET _analyze
{
"analyzer": "ik_smart",
"text": "人民教育出版社"
}

# 最细力度划分:可能所有组合
GET _analyze
{
"analyzer": "ik_max_word",
"text": "人民教育出版社"
}


5.1 增加自己的配置
elasticsearch-analysis-ik-7.17.0confi/IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">my.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
my.dic
有勇气的牛排
重启
docker restart 41e4c48f216c
学习地址:狂神说
https://www.bilibili.com/video/BV17a4y1x7zq
<h2><a id="1__0"></a>1 介绍</h2>
<p>Elasticsearch是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。<br />
它用于<mark>全文搜索</mark>、<mark>结构或搜索</mark>、<mark>分析</mark>以及将这三者混合使用</p>
<p>搜索纠错、实时反馈</p>
<p><img src="https://static.couragesteak.com/article/29fcfe90e9fe0512a0f650323f492cd5.png" alt="image.png" /></p>
<h2><a id="2_ELK_9"></a>2 ELK安装</h2>
<p>环境:</p>
<ul>
<li>JDK1.8 最低要求</li>
<li>Java开发、ElasticSearch的版本和我们之后对应的Java的核心jar包。</li>
</ul>
<p>官网:<a href="https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-6-2" target="_blank">https://www.elastic.co/cn</a></p>
<p>下载:<a href="https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-6-2" target="_blank">https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-6-2</a></p>
<p><mark>我们在windows下演示</mark></p>
<p>ELK三剑客,解压即用:</p>
<ul>
<li>Nodejs</li>
<li>python2</li>
</ul>
<h3><a id="21_Elasticearch_27"></a>2.1 Elasticearch安装</h3>
<h4><a id="211_windows__29"></a>2.1.1 windows 安装</h4>
<p><img src="https://static.couragesteak.com/article/be91dcb2eaeaca23f52e21324d97d9ee.png" alt="image.png" /></p>
<pre><code class="lang-powershell">bin 启动文件
config 配置文件
log4j2 日志配置文件
jvm.options java 虚拟机相关配置
elasticsearch.yml elasticsearch配置文件 默认9200端口!有跨域问题
lib 相关jar包
logs 日志
modules 功能模块
plugubs 插件 ik分词
</code></pre>
<p>启动:<br />
<code>bin/elasticsearch.bat</code></p>
<p>访问测试<br />
<code>http://127.0.0.1:9200/</code></p>
<pre><code class="lang-powershell">{
"name" : "USERMIC-AQENDNF",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "SgT0Xh5-QvCHBwjnrlMhOw",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
</code></pre>
<h4><a id="212_linxu_71"></a>2.1.2 linxu安装</h4>
<pre><code class="lang-powershell">wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.2-linux-x86_64.tar.gz
</code></pre>
<h3><a id="22__elasticsearchhead_77"></a>2.2 可视化界面 elasticsearch-head</h3>
<p><a href="https://github.com/mobz/elasticsearch-head" target="_blank">https://github.com/mobz/elasticsearch-head</a></p>
<p>1、配置elasticsearch</p>
<p>解决跨域问题:<code>elasticsearch-7.6.2\config\elasticsearch.yml</code></p>
<p>文件尾部添加如下代码</p>
<pre><code class="lang-powershell">http.cors.enabled: true
http.cors.allow-origin: "*"
</code></pre>
<p>2、启动elasticsearch-head</p>
<pre><code class="lang-powershell">docker build -t elk-head .
</code></pre>
<h3><a id="23__Kibana_96"></a>2.3 安装 Kibana</h3>
<p>官网:<a href="https://www.elastic.co/cn/kibana/" target="_blank">https://www.elastic.co/cn/kibana/</a><br />
<img src="https://img-blog.csdnimg.cn/4b0eeb7d66024d2e889cac714a7a9a91.png" alt="在这里插入图片描述" /><br />
<mark>Kibana版本要和ES一致</mark></p>
<p><strong>1、启动</strong></p>
<p><code>http://localhost:5601</code></p>
<p><img src="https://static.couragesteak.com/article/c3e75b17e2adb0d3e4e2d448ca8b34a5.png" alt="image.png" /></p>
<p><strong>2、汉化</strong></p>
<p>国际化文件<code>x-pack\plugins\translations\translations\zh-CN.json</code><br />
修改配置:<code>config/</code> <code>kibana.yml</code><br />
116行</p>
<pre><code class="lang-powershell">i18n.locale: "zh-CN"
</code></pre>
<h2><a id="3_dockerelk_119"></a>3 docker部署elk</h2>
<p>docker命令:<a href="https://vitcloud.blog.csdn.net/article/details/122652560" target="_blank">https://vitcloud.blog.csdn.net/article/details/122652560</a></p>
<p>下载:</p>
<p><a href="https://github.com/deviantony/docker-elk/tree/release-7.x" target="_blank">https://github.com/deviantony/docker-elk/tree/release-7.x</a></p>
<p><code>http://localhost:9200/</code><br />
<code>http://localhost:5601/</code></p>
<h3><a id="31__131"></a>3.1 基本配置</h3>
<p><strong>1. 启动</strong></p>
<pre><code class="lang-powershell">docker-compose up
</code></pre>
<p>默认用户名、密码<br />
<code>user</code>: <code>elastic</code><br />
<code>password</code>: <code>changeme</code></p>
<p><strong>2 为内置用户初始化密码</strong></p>
<pre><code class="lang-powershell">docker-compose exec -T elasticsearch bin/elasticsearch-setup-passwords auto --batch
</code></pre>
<pre><code class="lang-powershell">Changed password for user apm_system
PASSWORD apm_system = 40iHqszWXZuBHJUAO2rO
Changed password for user kibana_system
PASSWORD kibana_system = Mld3fRmxEmJy5mLwhbc2
Changed password for user kibana
PASSWORD kibana = Mld3fRmxEmJy5mLwhbc2
Changed password for user logstash_system
PASSWORD logstash_system = FEwag4dLfVJS6cVVZemn
Changed password for user beats_system
PASSWORD beats_system = S6L29ErIA3jigEQLTvnW
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = 7zWztQAFCoWytAA9VCDm
Changed password for user elastic
PASSWORD elastic = EtWvHc8lGh05YS7vS1mq
</code></pre>
<p><strong>3 取消设置引导密码(可选)</strong></p>
<p>docker-compose.yml</p>
<p>ELASTIC_PASSWORD</p>
<p><strong>4 替换密码</strong><br />
<code>kibana/config/kibana.yml</code></p>
<pre><code class="lang-powershell">elasticsearch.username: elastic
elasticsearch.password: EtWvHc8lGh05YS7vS1mq
</code></pre>
<p><code>logstash/config/logstash.yml</code></p>
<pre><code class="lang-powershell">xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: EtWvHc8lGh05YS7vS1mq
</code></pre>
<p><code>logstash/pipeline/logstash.conf</code></p>
<pre><code class="lang-powershell">output {
elasticsearch {
hosts => "elasticsearch:9200"
user => "elastic"
password => "EtWvHc8lGh05YS7vS1mq"
ecs_compatibility => disabled
}
}
</code></pre>
<p>重启服务</p>
<pre><code class="lang-powershell">docker-compose restart kibana logstash
</code></pre>
<h3><a id="32__211"></a>3.2 安装插件</h3>
<p><strong>1. 命令安装</strong><br />
在Dockerfile添加下面格式命令</p>
<pre><code class="lang-powershell">RUN elasticsearch-plugin install analysis-icu
</code></pre>
<p><strong>2. 手动安装</strong></p>
<p>进入容器</p>
<pre><code class="lang-powershell">docker exec -it e40bd5ee5f42 /bin/bash
</code></pre>
<p>宿主机解压好后,想容器复制插件</p>
<pre><code class="lang-powershell">docker cp /usr/local/ik/ 容器名:/usr/share/elasticsearch/plugins
</code></pre>
<pre><code class="lang-powershell">docker cp /usr/local/ik/ docker-elk_elasticsearch_1:/usr/share/elasticsearch/plugins
</code></pre>
<p>重启容器</p>
<pre><code class="lang-powershell">docker restart 41e4c48f216c
</code></pre>
<h2><a id="4_ES_237"></a>4 ES核心概念</h2>
<ol>
<li>索引</li>
<li>字段类型(mapping)</li>
<li>文档</li>
</ol>
<p><mark>集群、节点、索引、类型、文档、分片、映射是什么?</mark><br />
elesticsearch是面向文档,关系行数据库和delecticsearch客观的对比</p>
<table>
<thead>
<tr>
<th>Relation DB</th>
<th>Elasticsearch</th>
</tr>
</thead>
<tbody>
<tr>
<td>数据库</td>
<td>索引(indices)</td>
</tr>
<tr>
<td>表(tables)</td>
<td>types(逐渐弃用)</td>
</tr>
<tr>
<td>行(rows)</td>
<td>documents</td>
</tr>
<tr>
<td>字段(columns)</td>
<td>fields</td>
</tr>
</tbody>
</table>
<p><strong>物理设计:</strong><br />
eleasticsearch在后台把每个<strong>索引分成多个分片</strong>,每分分片可以在集群中的不同服务器间迁移</p>
<blockquote>
<p>文档</p>
</blockquote>
<p>elasticsearch是面向文档的,name就意味着索引和搜索数据的做小单位是文档,在elasticsearch中,文档有以下几个重要属性。</p>
<ul>
<li>自我包含,一篇文档同时包含字段和对应的值,也就是同时包含key:value</li>
<li>可以使层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的。</li>
<li>灵活的结构,文档不依赖预先定义的模式,我们指导关系型数据库中,要提前定义字段才能使用,在elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个新的字段。</li>
</ul>
<blockquote>
<p>类型<br />
映射类型</p>
</blockquote>
<pre><code class="lang-powershell">name: string test
birt: date
</code></pre>
<blockquote>
<p>索引<br />
就是数据库</p>
</blockquote>
<p><img src="https://static.couragesteak.com/article/5d882a0a23eab410feef470c1a4f960e.png" alt="image.png" /></p>
<p>一个集群至少有一个节点,而一个节点就是一个elasticsearch进程,节点可以有多个索引<br />
如果创建索引,那么有5个分片(primary shard,又称主分片)构成的,每一个主分片会有一个副本(replic shard, 又称复制分片)</p>
<p>一个分片是一个Lucene索引</p>
<blockquote>
<p>倒排索引</p>
</blockquote>
<p>elesticsearch使用的是一种称为倒排索引的机构,采用Lucene倒排索作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个次,都有一个包含它的文档列表。<br />
例如,现有两个文档,每个文档包含如下内容:</p>
<pre><div class="hljs"><code class="lang-c">study every day, good good up to forever # 文档<span class="hljs-number">1</span>
Tto forever, study erery day # 文档<span class="hljs-number">2</span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/ccbd5ea86f9d05ee85af7bc685662e76.png" alt="image.png" /></p>
<p><img src="https://static.couragesteak.com/article/5628f851c54432e491fda9471c862bac.png" alt="image.png" /></p>
<p>如果要搜索含有python标签的文章,那相对于查找的所有原始数据而言,查找倒排</p>
<h2><a id="5_IK_297"></a>5 IK分词器插件</h2>
<blockquote>
<p>什么事IK分词器?</p>
</blockquote>
<p>分词:即把一段中文或者别的划分成一个个关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是将每个字看成一个词。</p>
<p>IK提供了两个分词算法:ik_smart和ik_max_word,其中ik_smart为最少的切分,ik_max_word为最细力度划分。</p>
<p><strong>1. 安装</strong><br />
注意版本<br />
<a href="https://github.com/medcl/elasticsearch-analysis-ik" target="_blank">https://github.com/medcl/elasticsearch-analysis-ik</a></p>
<p><img src="https://static.couragesteak.com/article/2ca863b467864b758059c2eaf3648c43.png" alt="image.png" /></p>
<p>查看已加载的插件<br />
<code>elasticsearch-plugin.bat</code></p>
<pre><code class="lang-powershell">elasticsearch-plugin list
</code></pre>
<p><img src="https://static.couragesteak.com/article/939bee31e2a8d6d95cd88d04242ad7c9.png" alt="image.png" /></p>
<pre><code class="lang-powershell"># 最少切分
GET _analyze
{
"analyzer": "ik_smart",
"text": "人民教育出版社"
}
</code></pre>
<p><img src="https://static.couragesteak.com/article/b50a900c20bf35cb2be97f8f417a6731.png" alt="image.png" /></p>
<pre><code class="lang-powershell"># 最细力度划分:可能所有组合
GET _analyze
{
"analyzer": "ik_max_word",
"text": "人民教育出版社"
}
</code></pre>
<p><img src="https://static.couragesteak.com/article/a9a117e07e846bfd70a8e26e51e2a6e7.png" alt="image.png" /></p>
<p><img src="https://static.couragesteak.com/article/83a95af00b40b43e69962c9c84d31f79.png" alt="image.png" /></p>
<h3><a id="51__348"></a>5.1 增加自己的配置</h3>
<p><code>elasticsearch-analysis-ik-7.17.0confi/IKAnalyzer.cfg.xml</code></p>
<pre><code class="lang-powershell"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">my.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
</code></pre>
<p><code>my.dic</code></p>
<pre><code class="lang-powershell">有勇气的牛排
</code></pre>
<p>重启</p>
<pre><code class="lang-powershell">docker restart 41e4c48f216c
</code></pre>
<p>学习地址:狂神说<br />
<a href="https://www.bilibili.com/video/BV17a4y1x7zq" target="_blank">https://www.bilibili.com/video/BV17a4y1x7zq</a></p>
留言