1、什么是ElasticSearch?
强大的开源搜索引擎,能够快速的从海量数据当中找到所需要的内容。
常用的百度
、Google
、打车软件
等等,都与es有很大的关联。
同时elasticSearch结合kibana
、Logstash
、Beats
就是通俗的Elastic stack(ELK),广泛应用于日志分析,实时监控等。
1. Kibana:数据可视化
2. Elasticsearch:存储、计算、数据搜索
3. Logstash、Beats:数据抓取。
2、基础概念
2.1 正向索引
传统MySQL中采用的就是正向索引。
如上图中所示,常规的MySQL数据表中都会存在一个主键Id,同时根据Id去建立一个索引,形成一个B+树,最后进行查询同时,增加一定的检索速度。这种方式即是正向索引
。
但MySQL在进行文本查询时,在数据庞大的情况下利用模糊查询,查询过程将一条记录一条记录的进行判定,这样的SQL效率和性能都是极低。
2.2 倒排索引
在Elasticsearch中采用倒排索引,其中包含两个概念词条
和文档
。
词条
:文档按照语义分成词语
文档
:每条数据就是一个文档()
以上是正向索引到倒排索引的一个转换过程(没有明确步骤):
根据在倒排索引中存在的两个基础概念词条
、文档
,可以将左侧中的记录,根据title
值拆分出词条
同时记录文档id
,最终在需要检索时,通过检索词条,最后拿到文档组成的合集。 这样在检索文本时将大大减少查询时间。
利用在es中存在的两个概念,再去解读
正向索引
和倒排索引
,正向索引基于文档id创建索引,查询词条时必须找到文档,判断是否包含词条。倒排索引对文档中词条进行分词,对词条创建索引,并记录词条中所包含的文档的信息。查询是先根据词条找到文档id,而后再进行文档的获取。
2.3 ES中关键词解释
文档
:一条数据就是一个文档,es中是Json格式。
字段
:JSON文档中的字段。
索引
:同类型文档的集合。
映射
:索引中文档的约束,比如字段名称、类型。
3、安装Elasticsearch(docker方式)
Elasticseach(docker镜像、及安装)
创建用户定义的网络(对于连接到连接到同一网络的其他服务(例如 Kibana)很有用):
docker network create somenetwork
Run Elasticsearch: 运行 Elasticsearch:
docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
可以直接忽略网络创建,直接利用当前服务器网卡进行创建直接利用linux网卡创建执行
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
执行成功后能看到建立容器的id,同时执行docker ps
查看已经运行的容器。
最后在浏览器中输入对应ip:9200
即可。
3.1、安装过程中出现问题
3.1.2 网页提示xxxx未发送任何数据
复制es配置文件带宿主机:
docker cp b4d19cedb94a:/usr/share/elasticsearch/config/elasticsearch.yml ./
# b4d19cedb94a:为容器ID
# ./复制当前目录
其他位置内容均可不变
修改配置文件内容(true修改为fasle):
保存,将配置文件替换容器中的配置文件
docker cp ./elasticsearch.yml b4d19cedb94a:/usr/share/elasticsearch/config/elasticsearch.yml
重启es容器,即可解决该问题。
4、安装kibana(docker,注意与es版本兼容)
kibana(docker官方安装文档)
在给定的示例中,Kibana 将连接到用户定义的网络(对于连接到其他服务(例如 Elasticsearch)很有用)。如果尚未创建 network,可以使用以下命令完成此操作:
docker network create somenetwork
注意:在此示例中,Kibana 使用默认配置,并希望以 http://localhost:9200
Run Kibana 运行 Kibana
docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:8.15.3
可以直接忽略网络创建,直接利用当前服务器网卡进行创建直接利用linux网卡创建执行**
docker run -d --name kibana -p 5601:5601 kibana:tag
可以通过浏览器通过 http://localhost:5601
或 http://host-ip:5601
访问 Kibana
根据下面操作连接到es,也可以生成token连接到es。
服务器中执行
#查看运行容器
[root@localhost default]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ebba7d045223 kibana:8.15.3 "/bin/tini -- /usr/l…" 3 minutes ago Up 3 minutes 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana_1
b4d19cedb94a elasticsearch:8.15.3 "/bin/tini -- /usr/l…" 52 minutes ago Up 33 minutes 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch
#进入bash
[root@localhost default]# docker exec -it ebba7d045223 /bin/bash
#获取验证码
kibana@ebba7d045223:~$ bin/kibana-verification-code
Kibana is currently running with legacy OpenSSL providers enabled! For details and instructions on how to disable see https://www.elastic.co/guide/en/kibana/8.15/production.html#openssl-legacy-provider
#获取到验证码填入
Your verification code is: 496 024
kibana@ebba7d045223:~$
等待初始化,链接成功。
5、安装LK分词器
5.1 安装流程
docker命令
#查看运行容器
[root@localhost default]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ebba7d045223 kibana:8.15.3 "/bin/tini -- /usr/l…" 3 minutes ago Up 3 minutes 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana_1
b4d19cedb94a elasticsearch:8.15.3 "/bin/tini -- /usr/l…" 52 minutes ago Up 33 minutes 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp elasticsearch
#进入bash
[root@localhost default]# docker exec -it b4d19cedb94a /bin/bash
#插件安装
elasticsearch@b4d19cedb94a:~$ bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.4.1
执行安装后重启
能够看到插件已经正常加载
5.2 测试
ik具有的两种模式:ik_smart 最少细分
和 ik_max_word 最细细分
。
在es中进行分析执行:
POST /_analyze
{
"analyzer":"ik_smart|ik_max_word",
"text":"今天在学习es,非常牛逼。"
}