初识elasticsearch

了解ES

elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。

elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域。

什么是elasticsearch?

         一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能

什么是elastic stack(ELK)?

        是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch

什么是Lucene?

        是Apache的开源搜索引擎类库,提供了搜索引擎的核心API

倒排索引

传统数据库(如MySQL)采用正向索引,例如给下表(tb_goods)中的id创建索引:

初识elasticsearch_第1张图片

 elasticsearch采用倒排索引:

        文档:每条数据就是一个文档

        词条:文档按照语义分成的词语

初识elasticsearch_第2张图片

 词条词典(Term Dictionary):记录所有词条,以及词条与倒排列表(Posting List)之间的关系,会给词条创建索引,提高查询和插入效率

倒排列表(Posting List):记录词条所在的文档id、词条出现频率 、词条在文档中的位置等信息

文档id:用于快速获取文档

词条频率(TF):文档在词条出现的次数,用于评分

总结

什么是正向索引?

         基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条

什么是倒排索引?

        对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档

es的一些概念

文档

        elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。 文档数据会被序列化为json格式后存储在elasticsearch中。

索引

        相同类型的文档的集合

映射

        索引中文档的字段约束信息,类似表的结构约束

Mysql对比

初识elasticsearch_第3张图片

架构

Mysql:擅长事务类型操作,可以确保数据的安全和一致性

Elasticsearch:擅长海量数据的搜索、分析、计算 

安装es、kibana

1、创建网络

因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:
docker network create es-net

2、加载镜像

初识elasticsearch_第4张图片

初识elasticsearch_第5张图片

去dockerHub上边或者自己加载镜像都是可以的,需要注意的是这两者的版本需要一致。

3、运行        需要注意的是你需要将版本换成你自己的,可通过docker images查看

运行es

docker run -d \
	--name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

解释

-   -e "cluster.name=es-docker-cluster"`:设置集群名称
-   -e "http.host=0.0.0.0"`:监听的地址,可以外网访问
-   -e "ES_JAVA_OPTS=-Xms512m -Xmx512m"`:内存大小
-   -e "discovery.type=single-node"`:非集群模式
-   -v es-data:/usr/share/elasticsearch/data`:挂载逻辑卷,绑定es的数据目录
-   -v es-logs:/usr/share/elasticsearch/logs`:挂载逻辑卷,绑定es的日志目录
-   -v es-plugins:/usr/share/elasticsearch/plugins`:挂载逻辑卷,绑定es的插件目录
-   --privileged`:授予逻辑卷访问权
-   --network es-net` :加入一个名为es-net的网络中
-   -p 9200:9200`:端口映射配置

        部署成功可通过ip+9200访问

运行kibana

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

解释

-  --network es-net` :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
-  -e ELASTICSEARCH_HOSTS=http://es:9200"`:设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
-  -p 5601:5601`:端口映射配置

        部署成功可通过ip+5601访问,进入DevTools界面进行编程。

 分词器

es在创建倒排索引时需要对文档分词;在搜索时,需要对用户输入内容分词。但默认的分词规则对中文处理并不友好。

在线安装(比较慢)

# 进去容器内部
docker exec -it elasticsearch /bin/bash
#在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

#退出

exit

# 重启

docker restart elasticsearch

离线安装(比较快)

#查看数据卷目录
docker volume inspect es-plugins
#上传ik分词器到es容器的插件数据卷中

#重启

docker restart es

ik分词器包含两种模式:

ik_smart:最少切分,粗粒度

ik_max_word:最细切分,细粒度

ik分词器扩展-扩展词库

要拓展ik分词器的词库,只需要修改一个ik分词器目录中的config目录中的IkAnalyzer.cfg.xml文件:

初识elasticsearch_第6张图片

 添加后创建文件添加扩展词语即可。

需要重启。

分词器得作用:

        创建倒排索引时对文档分词

        用户搜索时,对输入的内容分词

IK分词器得模式

        ik_smart:智能切分,粗粒度

        ik_max_word:最细切分,细粒度

如何拓展词条、停用词条

        利用config目录的IkAnalyzer.cfg.xml文件添加拓展词典和停用词典

         在词典中添加拓展词条或者停用词条

你可能感兴趣的:(elasticsearch,搜索引擎,大数据)