跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Elasticsearch 核心概念与常见面试问题解析

Elasticsearch 基于 Lucene 构建,提供分布式全文搜索能力。核心概念涵盖集群、节点、索引、文档及分片与副本机制。倒排索引实现快速检索,分析器负责文本处理。本文梳理了从基础定义到字段属性(enabled、store、index)的常见面试考点,帮助理解其无架构特性与映射管理逻辑。

赛博行者发布于 2018/9/28更新于 2026/6/1620 浏览
Elasticsearch 核心概念与常见面试问题解析

Elasticsearch 基础概述

Elasticsearch 是一个基于 Lucene 的分布式搜索引擎。它提供了 HTTP Web 界面和无架构(Schema-less)的 JSON 文档处理能力,支持多租户环境下的全文搜索。Elasticsearch 使用 Java 开发,遵循 Apache 许可条款开源发布。

在文档层面,我们可以执行以下基本操作:

  • 创建:将文档索引到 Elasticsearch 中。
  • 读取:检索已存储的文档内容。
  • 更新:修改现有文档的内容。
  • 删除:移除不需要的文档。

核心数据结构:倒排索引

倒排索引是搜索引擎的核心组件。其主要目标是在海量数据中快速定位包含特定搜索条件的文档。简单来说,它将单词映射到包含该单词的文档列表,类似于书籍末尾的索引页,通过关键词直接找到对应的页码。

例如,对于文本'JavaInUse 是一个很好的网站',系统会将其标记为独立的术语(Terms),并记录每个术语出现的文档 ID 及位置。当用户搜索'网站'时,系统直接查询倒排索引,迅速识别出包含该词的文档,而无需遍历所有文件。

集群架构与层级关系

理解 Elasticsearch 的层级结构至关重要:

  1. 集群(Cluster):由一个或多个节点组成,共同保存数据并提供联合索引和搜索功能。集群名称必须唯一,默认值为 elasticsearch。只有名称匹配的节点才能加入同一集群。
  2. 节点(Node):集群中的单个服务器实例,负责存储数据和参与索引/搜索任务。
  3. 索引(Index):类似于关系型数据库中的'数据库'。它是逻辑名称空间,映射到一个或多个主分片,并可配置多个副本分片。
  4. 文档(Document):对应数据库中的一行数据。不同之处在于,Elasticsearch 中的每个文档可以具有不同的字段结构(动态映射),但通用字段应保持相同的数据类型。
  5. 类型(Type):注:在较新版本中已被弃用。这是索引的逻辑分区,语义完全取决于用户定义。在早期版本中,一个索引可包含多种类型。

无架构特性与映射管理

Elasticsearch 通常被称为'无架构'或'模式灵活'的数据库,这意味着可以在不明确定义字段类型的情况下索引文档。如果未指定映射(Mapping),Elasticsearch 会在索引期间自动检测新字段并动态生成映射。不过,为了优化性能和确保数据类型正确,建议在生产环境中显式定义 Mapping。

分片与副本机制

由于 Elasticsearch 是分布式的,索引会被分割成多个分片(Shard),这些分片分布在不同的节点上,以实现水平扩展和数据分发。

**副本(Replica)**则是分片的完整拷贝。引入副本的主要目的是提高系统的可用性(高可用)和读取性能。如果一个主分片所在的节点宕机,副本分片可以立即提升为主分片,保证服务不中断。

分析器与文本处理

在索引数据时,Elasticsearch 会使用**分析器(Analyzer)**对文本进行转换。分析器由三个部分组成:

  1. 字符过滤器(CharFilter):可选,用于预处理输入字符串(如去除 HTML 标签)。
  2. 分词器(Tokenizer):核心组件,负责将字符串拆分为术语流(Tokens)。例如,遇到空格或标点时进行切分。
  3. 令牌过滤器(Token Filter):对分词后的结果进行处理,如转换为小写、去除停用词等。

Elasticsearch 内置了多种预构建的分析器,也支持组合内置组件创建自定义分析器。

字段属性详解

在定义字段时,有几个关键属性需要注意:

  • enabled:控制字段是否被索引。默认为 true。如果设为 false,该字段不会被索引,但仍存在于 _source 中。
  • :决定原始数据是否单独存储。默认情况下,字段不单独存储,但完整的 会保留。如果设置 ,Lucene 会单独存储该字段值,以便后续直接返回,但这会增加存储空间开销。
store
_source
store: true
  • index:仅用于控制字段是否可被搜索。如果字段经过分析器处理(如分词),则无法直接检索原始数据,因此需要权衡是否需要单独存储原始值。
  • 理解这些底层机制,有助于在实际应用中更好地设计索引策略,平衡查询性能与存储成本。

    目录

    1. Elasticsearch 基础概述
    2. 核心数据结构:倒排索引
    3. 集群架构与层级关系
    4. 无架构特性与映射管理
    5. 分片与副本机制
    6. 分析器与文本处理
    7. 字段属性详解
    • 免费图片AI生成工具免费生成了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
    • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
    • 100+免费在线小游戏爽一把
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • Elasticsearch + Kibana 实战指南:从安装部署到 C++ 客户端封装
    • Spring Bean Scope 作用域详解
    • Elasticsearch 与 Kibana 实战:从部署到 C++ 客户端封装
    • Elasticsearch 与 Kibana 实战:安装部署及 C++ 客户端封装
    • Elasticsearch 与 Kibana 实战:安装部署及 C++ 客户端封装
    • Elasticsearch + Kibana 实战指南:从安装部署到 C++ 客户端封装
    • Elasticsearch 与 Kibana 实战:从部署到 C++ 客户端封装
    • 前端视角下的 Nginx 反向代理实战指南
    • Elasticsearch 与 Kibana 实战:安装部署及 C++ 客户端封装
    • WebUI 测试与 Playwright 自动化适配方案
    • Elasticsearch + Kibana 实战:安装部署与 C++ 客户端封装
    • EIAM 开源企业身份管理平台实战
    • Java SE 文件 IO 基础
    • EhViewer 安卓客户端安装与使用指南
    • Spring MVC 核心架构与注解详解
    • EhViewer:安卓开源漫画工具安装与使用教程
    • Visual Studio 配置 C++ OpenCV 环境实战指南
    • 主流 AI 编程工具定价对比:Cursor、Windsurf、Kiro、Zed 与 VS Code
    • EhViewer:开源免费安卓 E-Hentai 漫画浏览工具安装与使用指南
    • EhViewer 安卓端 E-Hentai 漫画浏览工具安装与使用教程

    相关免费在线工具

    • Keycode 信息

      查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

    • Escape 与 Native 编解码

      JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

    • JavaScript / HTML 格式化

      使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

    • JavaScript 压缩与混淆

      Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online