当前位置:   article > 正文

【Elasticsearch】学习笔记-p1,2024年最新java消息机制面试题

【Elasticsearch】学习笔记-p1,2024年最新java消息机制面试题
  • 将每一个文档的数据利用算法分词,得到一个个词条

  • 创建表,每行数据包括词条、词条所在文档id、位置等信息

  • 因为词条唯一性,可以给词条创建索引,例如hash表

举个栗子:

如图:

img

倒排索引的搜索流程如下(以搜索"华为手机"为例):

1)用户输入条件"华为手机"进行搜索。

2)对用户输入内容分词,得到词条:华为手机

3)拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。

4)拿着文档id到正向索引中查找具体文档。

如图:

img

虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。

2.3 正向和倒排

那么为什么一个叫做正向索引,一个叫做倒排索引呢?

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

正向索引和倒排索引各自的优缺点:

正向索引

  • 优点:

  • 可以给多个字段创建索引

  • 根据索引字段搜索、排序速度非常快

  • 缺点:

  • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引

  • 优点:

  • 根据词条搜索、模糊搜索时,速度非常快

  • 缺点:

  • 只能给词条创建索引,而不是字段

  • 无法根据字段做排序

3.es的一些概念


3.1 文档和字段

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

img

而 JSON 文档中往往包含很多的字段(Field),类似于数据库中的列。

3.2 索引和映射

索引(Index),就是相同类型的文档的集合。

例如:

  • 所有用户文档,就可以组织在一起,称为用户的索引;

  • 所有商品的文档,可以组织在一起,称为商品的索引;

  • 所有订单的文档,可以组织在一起,称为订单的索引;

img

因此,我们可以把索引当做是数据库中的表。

数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(mapping),是索引中文档的字段约束信息,类似表的结构约束。

3.3 mysql 与 elasticsearch

| MySQL | Elasticsearch | 说明 |

| :-- | :-- | :-- |

| Table | Index | 索引index,就是文档的集合,类似数据库的表table |

| Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 |

| Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |

| Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) |

| SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD |

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

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

因此在企业中,往往是两者结合使用:

  • 对安全性要求较高的写操作,使用 MySQL 实现

  • 对查询性能要求较高的搜索需求,使用 ELasticsearch 实现

  • 两者再基于某种方式,实现数据的同步,保证一致性

img

4.安装Elasticsearch、kibana、IK分词器


4.1 部署单点Elasticsearch

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

docker network create es-net


法一:可以直接pull(速度较慢)

法二:用提供的镜像的tar包

这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。

这里演示法二,大家将其上传到虚拟机中,然后运行命令加载即可:

导入数据

docker load -i es.tar

同理还有kibana的tar包也需要这样做。


运行docker命令,部署单点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:端口映射配置

在浏览器中输入:http://192.168.150.101:9200 (需要改成自己虚拟机的ip)即可看到elasticsearch的响应结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JShkYUaM-1637146335818)(file://C:\Users\30287\Desktop\Java%E5%AD%A6%E4%B9%A0%E8%A7%86%E9%A2%91\day05-Elasticsearch01%E8%B5%84%E6%96%99\assets\image-20210506101053676.png?lastModify=1637140674)]

4.2 部署kibana

运行docker命令,部署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:端口映射配置

此时,在浏览器输入地址访问:http://192.168.150.101:5601,即可看到结果

img

4.3 安装IK分词器

在线安装IK插件(较慢):

进入容器内部

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

这里演示离线安装iK插件:

查看数据卷目录

安装插件需要知道elasticsearchplugins目录位置,而我们用了数据卷挂载,因此需要查看elasticsearch的数据卷目录,通过下面命令查看:

docker volume inspect es-plugins

显示结果:

[

{

“CreatedAt”: “2022-05-06T10:06:34+08:00”,

“Driver”: “local”,

“Labels”: null,

“Mountpoint”: “/var/lib/docker/volumes/es-plugins/_data”,

“Name”: “es-plugins”,

“Options”: null,

“Scope”: “local”

}

]

说明plugins目录被挂载到了:/var/lib/docker/volumes/es-plugins/_data这个目录中。

将准备好的文件夹上传到es容器的插件数据卷中

也就是/var/lib/docker/volumes/es-plugins/_data

img

重启容器

docker restart es

IK分词器包含两种模式:

  • ik_smart:智能切分,粗粒度

  • ik_max_word:最细切分,细粒度

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

image

image

image

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

[外链图片转存中…(img-L3WQehnz-1712787794195)]

[外链图片转存中…(img-Zps7Lgx5-1712787794195)]

[外链图片转存中…(img-loR11iq4-1712787794195)]

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-62tgDWaq-1712787794195)]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/748800
推荐阅读
相关标签
  

闽ICP备14008679号