# Elasticsearch面试常见问题(一):基础概念与架构
## 1. Elasticsearch是什么?它的主要特点是什么?
**答案:**
– Elasticsearch是一个开源的分布式搜索和分析引擎,基于Lucene构建
– 主要特点:
– 分布式:支持水平扩展
– 实时:近实时搜索和分析
– 多租户:支持多个索引和类型
– 全文搜索:支持复杂的全文搜索
– 结构化搜索:支持结构化数据搜索
– 分析能力:支持聚合分析
– RESTful API:使用HTTP和JSON进行交互
## 2. Elasticsearch的架构是什么样的?
**答案:**
– Elasticsearch采用分布式架构:
– 节点(Node):单个Elasticsearch实例
– 集群(Cluster):多个节点组成的集合
– 索引(Index):类似于数据库
– 类型(Type):类似于表(在7.0+版本中已废弃)
– 文档(Document):类似于行
– 分片(Shard):索引的一部分,可分布在不同节点上
– 副本(Replica):分片的备份
## 3. Elasticsearch的数据模型是什么样的?
**答案:**
– Elasticsearch是一个文档型数据库,使用JSON格式存储数据
– 数据模型层次:
– 索引(Index):包含多个文档
– 文档(Document):包含多个字段
– 字段(Field):包含数据值
– 每个文档都有一个唯一的ID
– 支持动态映射:自动检测字段类型
## 4. Elasticsearch的分片机制是什么?
**答案:**
– 分片是Elasticsearch索引的基本单位,每个索引可以分为多个分片
– 分片分为主分片(Primary Shard)和副本分片(Replica Shard)
– 主分片负责数据的写入和查询
– 副本分片是主分片的备份,提高系统的可靠性和读性能
– 分片的数量在创建索引时指定,后续无法修改
– 分片会自动分布在集群的不同节点上
## 5. Elasticsearch的倒排索引是什么?
**答案:**
– 倒排索引是Elasticsearch的核心数据结构,用于快速全文搜索
– 倒排索引的结构:
– 词项(Term):文档中的单词
– 文档ID列表:包含该词项的文档ID
– 词频(Term Frequency):词项在文档中出现的次数
– 位置(Position):词项在文档中的位置
– 倒排索引的优点:
– 快速全文搜索
– 支持复杂的查询
– 支持相关性排序
## 6. Elasticsearch的集群发现机制是什么?
**答案:**
– Elasticsearch使用Zen Discovery机制来发现和管理集群成员
– 主要组件:
– 种子节点(Seed Nodes):集群的初始节点列表
– 选举机制:选举主节点(Master Node)
– 心跳机制:检测节点状态
– 发现过程:
1. 节点启动时,向种子节点发送加入请求
2. 种子节点将请求转发给主节点
3. 主节点验证节点身份,将其加入集群
4. 主节点重新分配分片
## 7. Elasticsearch的主节点(Master Node)的作用是什么?
**答案:**
– 主节点负责集群的管理和协调:
– 管理集群状态
– 处理节点加入和离开
– 分配分片
– 执行集群级别的操作
– 主节点不负责数据的读写,所以负载较轻
– 集群可以有多个候选主节点,当主节点故障时,会选举新的主节点
## 8. Elasticsearch的查询类型有哪些?
**答案:**
– 全文查询:
– match:全文搜索
– match_phrase:短语搜索
– multi_match:多字段搜索
– 结构化查询:
– term:精确匹配
– range:范围查询
– bool:布尔组合查询
– filter:过滤查询
– 聚合查询:
– terms:分组聚合
– sum:求和聚合
– avg:平均值聚合
– max/min:最大/最小值聚合
– date_histogram:日期直方图聚合
## 9. Elasticsearch的相关性评分机制是什么?
**答案:**
– Elasticsearch使用TF-IDF(词频-逆文档频率)算法计算相关性评分
– 评分因素:
– TF(Term Frequency):词项在文档中出现的频率
– IDF(Inverse Document Frequency):词项在整个索引中的稀有程度
– 字段长度归一化:字段越短,评分越高
– 协调因子:文档中匹配的词项比例
– 评分公式:
“`
score = (TF * IDF * field_length_norm) * coordination_factor
“`
## 10. Elasticsearch与其他搜索引擎的区别是什么?
**答案:**
– 与Solr相比:
– Elasticsearch更专注于实时搜索
– Elasticsearch的API更友好
– Elasticsearch的分布式架构更成熟
– 与Splunk相比:
– Elasticsearch是开源的,而Splunk是商业软件
– Elasticsearch的部署更灵活
– Splunk的功能更丰富,尤其是在日志分析方面
– 与传统关系型数据库相比:
– Elasticsearch更适合全文搜索
– Elasticsearch的分布式架构更适合大规模数据
– 传统数据库更适合事务处理和复杂的关系查询
## 总结
Elasticsearch是一个功能强大的分布式搜索和分析引擎,在面试中经常会被问到相关的问题。掌握Elasticsearch的基础概念、架构和核心功能对于通过搜索和数据分析相关的技术面试非常重要。希望这些问题和答案能帮助你准备面试,祝你面试成功!