ES面试问题和入门资料

本文深入探讨了ES(Elasticsearch)的核心概念、操作原理、集群架构和应用场景,包括全文检索、倒排索引、数据写入与查询流程、Lucene基础、集群节点角色、数据分片与副本策略等。通过对ES面试问题的解析,帮助读者掌握ES的基础知识和进阶技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES面试问题和入门资料


开屏暴击:

1. 什么是全文检索?什么是ES?

Before: 之前用什么? 数据量少的时候用mysql的like %小张%

表越来越大,内容越来越多。 分库分表。

  • 增加了运维工作,数据迁移问题
  • 对于大数据的搜索,仍然存在效率问题,很慢

Then: 出现了 Lucene,全文检索工具。但是lucene对外暴露出的可用接口对于开发人员来说,操作是非常的复杂,而且没有效率的;于是在lucene的基础上进一步的封装

End: Es框架出现了,同样是以lucene为基础,并且吸收了前两代的教训而开发出的分布式多用户能力的全文搜索引擎

  • 提供restful web接口,操作方便
  • 集群部署,易于处理
  • 支持PB级别数据,接近实时搜索能力,自动发现节点 副本机制保障可用性

2. ES核心概念介绍

index:索引, 3中意思

  • 名词,类似于mysql的database。 一个索引就是一个拥有几分相似特征的文档的集合。
  • 动词,保存一个文档到索引中的过程, 类似 insert 语句
  • 倒排索引, mysql中使用 b+树索引到指定的列上,提升查询速度。 es使用倒排索引 来达到目的

type: 类似于 table。 从6.0.0版本后 一个index只能有一个type

document: index里面的一条记录称为 文档, 类似mysql中的行

field

mapping

cluster: 集群

节点node: 5中节点类型

分片shard和副本replicas

3. ES基本操作

索引的增、删

文档的 增、 删、 改、 查

4. 索引操作时候的分片交互过程

参考: https://blog.youkuaiyun.com/ZGL_cyy/article/details/120804713

5. es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?

写入过程:

  1. 客户端请求发给一个node,coordinating node(协调节点)

  2. 协调节点对document计算路由, 转发给 data-node(有primary-shard)

  3. primary处理完成后,同步给 replica node

  4. 所有节点都处理完成后,返回success

读数据过程:

可以通过 doc id 来查询,会根据 doc id 进行 hash,判断出来当时把 doc id 分配到了哪个 shard 上面去,从那个 shard 去查询。

  • 客户端发送请求到任意 一个 node,成为 coordinate node
  • coordinate nodedoc id 进行哈希路由,将请求转发到对应的 node,此时会使用 round-robin 随机轮询算法 ,在 primary shard 以及其所有 replica 中随机选择一个,让读请求负载均衡
  • 接收请求的 node 返回 document 给 coordinate node
  • coordinate node 返回 document 给客户端。

搜索数据过程:

es 最强大的是做全文检索,根据关键词搜索

  1. 客户端发送请求到一个 coordinate node
  2. 协调节点将搜索请求转发到所有 的 shard 对应的 primary shardreplica shard,都可以。
  3. query phase:每个 shard 将自己的搜索结果(其实就是一些 doc id)返回给协调节点,由协调节点进行数据的合并、排序、分页等操作,产出最终结果。
  4. fetch phase:接着由协调节点根据 doc id 去各个节点上拉取实际document 数据,最终返回给客户端。

https://cloud.tencent.com/de

Elasticsearch面试可能会问一些基础知识高级应用知识,以下是一些常见的问题及其答案: 1. 什么是Elasticsearch? Elasticsearch是一个基于Lucene的开源分布式搜索引擎,可以用于实现全文搜索、日志分析、数据可视化等。 2. 什么是索引? 在Elasticsearch中,索引是对一组文档进行分组存储的逻辑容器。它类似于关系型数据库中的表。 3. 什么是分片副本? 在Elasticsearch中,分片是将索引分成多个小块进行存储处理,可以提高搜索效率。副本是分片的拷贝,用于提高数据的可用性容错性。 4. 如何创建索引? 可以使用PUT方法创建索引,例如: PUT /my_index 5. 如何插入文档? 可以使用PUT方法插入文档,例如: PUT /my_index/_doc/1 { "title": "Elasticsearch入门指南", "author": "张三", "content": "这是一本关于Elasticsearch的入门指南。" } 6. 如何查询文档? 可以使用GET方法查询文档,例如: GET /my_index/_doc/1 7. 如何进行全文搜索? 可以使用match查询进行全文搜索,例如: GET /my_index/_search { "query": { "match": { "content": "Elasticsearch" } } } 8. 如何进行聚合查询? 可以使用aggs查询进行聚合查询,例如: GET /my_index/_search { "aggs": { "avg_price": { "avg": { "field": "price" } } } } 以上是一些常见的问题及其答案,当然,面试官还可能会根据你的简历经验提出其他问题。重要的是,要对Elasticsearch的基础知识高级应用有一定的了解,并且能够清晰地表达自己的思路解决问题的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值