面试题答案
一键面试索引命名规则
- 可读性:命名应具有明确含义,能够清晰表达索引所包含数据的主题或用途。例如,对于用户相关数据的索引,可命名为
user - data
,避免使用晦涩难懂的缩写或无意义字符。 - 唯一性:在整个 ElasticSearch 集群中,索引名称必须唯一,以防止混淆和数据冲突。
- 遵循特定模式:可采用一定模式,如业务模块 - 数据类型 - 时间范围等。如
ecommerce - product - 202312
表示电商业务 2023 年 12 月的产品数据索引。 - 避免特殊字符:除了
-
和_
等少数允许的字符外,尽量避免使用特殊字符,以免在某些客户端或工具中出现兼容性问题。
分片和副本设置原则
- 分片数量:
- 数据量考量:根据预估数据量来确定。如果数据量较小(如小于10GB),可适当设置较少分片,如1 - 3 个;对于大数据量(如TB级),则需更多分片。例如,对于100GB左右数据,可考虑设置10 - 20个分片,确保每个分片数据量在合理范围(如5 - 10GB),便于存储和检索。
- 节点数量:结合集群节点数量。每个节点能承载的分片数量有限,一般建议每个节点上的分片数量不超过30个。例如,一个有5个节点的集群,总分片数不宜超过150个。
- 查询性能:过多分片会增加查询的开销,因为每个分片都需要独立查询和合并结果。对于复杂查询场景,需平衡分片数量,避免过多分片导致性能下降。
- 副本数量:
- 高可用性:为保证数据高可用,至少设置1个副本。在某个节点故障时,副本可替代主分片继续提供服务。例如,重要业务数据可设置2 - 3个副本,确保在多个节点故障时数据仍可访问。
- 资源消耗:副本会占用额外的磁盘空间和网络带宽,需根据集群资源情况设置。如资源有限的集群,可适当减少副本数量,如设置1个副本;资源充足的集群,可增加副本数量提高可用性。
- 读性能提升:副本可分担读请求,提高读性能。对于读多写少的应用场景,可适当增加副本数量,如设置3 - 5个副本,将读请求分摊到多个副本上,提升整体读性能。
字段映射规范
- 数据类型准确性:明确每个字段的数据类型,如文本类型使用
text
,数值类型根据范围选择integer
、long
、float
等。避免错误类型映射导致数据存储和检索问题。 - 分析器选择:对于文本字段,选择合适的分析器。如英文文本可使用
standard
分析器,中文文本可使用ik
等中文分词分析器,确保文本能正确分词和索引,提高检索准确性。 - 字段属性设置:合理设置字段属性,如
index
控制字段是否可被索引,store
控制字段是否存储原始值。对于不需要检索但需要显示的字段,可设置index: false
,减少索引空间占用。
索引模板使用
- 通用性:创建通用的索引模板,涵盖常见的索引设置,如命名规则、分片副本、字段映射等。这样新创建索引时可直接应用模板,确保所有索引遵循统一规范。
- 版本管理:对索引模板进行版本管理,当索引规范发生变化时,可通过更新模板版本,逐步应用到新创建的索引,保证索引设置的一致性和可维护性。