1、什么是ElasticSearch?

强大的开源搜索引擎,能够快速的从海量数据当中找到所需要的内容。

 常用的百度Google打车软件等等,都与es有很大的关联。

 同时elasticSearch结合kibanaLogstashBeats就是通俗的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:5601http://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

 执行安装后重启

 能够看到插件已经正常加载

image.png

5.2 测试

ik具有的两种模式:ik_smart 最少细分ik_max_word 最细细分

 在es中进行分析执行:

POST /_analyze
{
  "analyzer":"ik_smart|ik_max_word",
  "text":"今天在学习es,非常牛逼。"
}
最后修改:2024 年 11 月 15 日
如果觉得我的文章对你有用,请随意赞赏