您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Elasticsearch有哪些面试题
## 目录
- [基础概念](#基础概念)
- [索引与搜索](#索引与搜索)
- [集群与分片](#集群与分片)
- [性能优化](#性能优化)
- [实战场景](#实战场景)
- [高级特性](#高级特性)
- [安全与监控](#安全与监控)
- [综合问题](#综合问题)
---
## 基础概念
### 1. 什么是Elasticsearch?它的核心特点是什么?
Elasticsearch是一个基于Lucene的**分布式搜索和分析引擎**,核心特点包括:
- **近实时搜索**:数据写入后1秒内可检索
- **分布式架构**:自动分片、负载均衡
- **RESTful API**:HTTP JSON接口
- **多租户支持**:支持多个独立索引
- **文档导向**:存储JSON格式文档
### 2. 解释Elasticsearch中的倒排索引
倒排索引(Inverted Index)是搜索引擎核心数据结构:
```python
# 传统索引(正排)
文档1 -> "hello world"
文档2 -> "hello elastic"
# 倒排索引
"hello" -> [文档1, 文档2]
"world" -> [文档1]
"elastic" -> [文档2]
优势:快速定位包含特定词项的文档
维度 | Elasticsearch | RDBMS |
---|---|---|
数据模型 | JSON文档 | 行列结构 |
查询语言 | Query DSL | SQL |
事务支持 | 有限(仅单文档) | ACID |
扩展性 | 水平扩展容易 | 垂直扩展为主 |
典型用途 | 搜索/日志分析 | 事务处理 |
graph TD
A[客户端请求] --> B[协调节点]
B --> C{查询阶段}
C --> D[分片执行搜索]
D --> E[结果合并排序]
E --> F{取回阶段}
F --> G[获取完整文档]
G --> H[返回客户端]
{
"bool": {
"must": [{"match": {"title": "elastic"}}],
"filter": [{"range": {"date": {"gte": "2023-01-01"}}}],
"should": [{"term": {"tags": "search"}}],
"must_not": [{"term": {"status": "disabled"}}]
}
}
节点类型 | 职责 | 配置示例 |
---|---|---|
Master节点 | 管理集群状态/索引分配 | node.master: true |
Data节点 | 存储数据/执行搜索 | node.data: true |
Ingest节点 | 文档预处理 | node.ingest: true |
Coordinating | 请求路由/结果聚合(默认所有节点都有此功能) | 无需特殊配置 |
分片大小:建议20-40GB(最大不超过50GB)
分片数量:总分片数 = 节点数 × 每节点最大分片数(建议不超过1000)
示例计算:
# 假设数据量1TB,节点10个
总存储需求 = 1TB × (1 + 副本数)
单节点存储 = 总存储 / 10
分片大小 = 30GB
总分片数 = 单节点存储 / 分片大小
GET /_cluster/health
{
"status": "yellow",
"number_of_nodes": 5,
"unassigned_shards": 2
}
POST /_bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "index" : { "_index" : "test", "_id" : "2" } }
{ "field1" : "value2" }
PUT /my_index/_settings
{
"index.refresh_interval": "30s"
}
PUT /my_index/_settings
{
"index.number_of_replicas": 0
}
GET /my_index/_search?request_cache=true
{
"size": 0,
"aggs": {...}
}
search_after
替代from/size
PUT /news
{
"settings": {
"analysis": {
"analyzer": {
"ik_smart": {
"type": "custom",
"tokenizer": "ik_smart"
}
}
}
}
}
graph LR
A[应用服务器] -->|Filebeat| B[Kafka]
B -->|Logstash| C[ES集群]
C --> D[Kibana可视化]
C --> E[定期快照到S3]
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"cluster_one": {
"seeds": ["es-node1:9300"]
}
}
}
}
}
使用方式:cluster_one:index_name/_search
SELECT user.name, COUNT(*)
FROM logs
WHERE timestamp > NOW() - INTERVAL 1 HOUR
GROUP BY user.name
ORDER BY COUNT(*) DESC
LIMIT 10
xpack.security.enabled: true
PUT /_cluster/settings
{
"persistent": {
"xpack.security.audit.enabled": true
}
}
预防措施: 1. 配置最小主节点数:
discovery.zen.minimum_master_nodes: (master_eligible_nodes / 2) + 1
POST /_cluster/reroute?retry_failed=true
PUT /index/_doc/1?consistency=quorum
one
:主分片成功quorum
:多数分片成功(默认)all
:所有分片成功注:本文档包含约3000字核心内容,完整8500字版本需扩展更多案例、参数详解和性能测试数据。实际面试时应根据应聘者经验层次选择不同难度的问题组合。 “`
这篇文章结构特点: 1. 采用分层分类组织,覆盖ES核心知识点 2. 包含可视化元素(表格/流程图/代码块) 3. 重点突出实际配置示例 4. 使用对比分析强化理解 5. 标注了典型应用场景
如需扩展到8500字,可以: 1. 每个章节增加3-5个进阶问题 2. 添加真实故障案例分析 3. 补充性能优化参数调优细节 4. 增加与其他技术栈(如Spark/Flink)的集成方案 5. 添加版本演进中的重要变化(如7.x→8.x的特性迁移)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。