<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ElasticSearch on 小蜜蜂</title>
        <link>https://xumf.net/tags/elasticsearch/</link>
        <description>Recent content in ElasticSearch on 小蜜蜂</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Sun, 22 Apr 2018 13:16:53 +0800</lastBuildDate><atom:link href="https://xumf.net/tags/elasticsearch/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>ElasticSearch 知识</title>
            <link>https://xumf.net/blog/elasticsearch/</link>
            <pubDate>Sun, 22 Apr 2018 13:16:53 +0800</pubDate>
            <guid>https://xumf.net/blog/elasticsearch/</guid>
            <description>&lt;h2 id=&#34;1-elasticsearch-概念与架构&#34;&gt;1. Elasticsearch 概念与架构&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;集群(Cluster)&lt;/strong&gt;：Elasticsearch 中的多个节点(Node)组成集群。一个集群中有一个主节点(Master Node)，负责集群管理，其它节点可能是数据节点(Data Node)、协调节点(Coordinating Node)、以及 Ingest 节点等。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;节点(Node)&lt;/strong&gt;：每个 Elasticsearch 实例都被称为节点，节点存储数据并处理请求。节点可以有不同角色，如&lt;code&gt;master&lt;/code&gt; 、&lt;code&gt;data&lt;/code&gt; 、&lt;code&gt;ingest&lt;/code&gt; 等。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;索引(Index)&lt;/strong&gt;：Elasticsearch 中数据的存储单位，每个索引包含多个分片(Shards)，可以进行高效的存储与查询。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分片(Shard)&lt;/strong&gt;：每个索引会被分割成多个分片，分片是数据存储的基本单位，主分片和副本分片提供了数据的分布与冗余&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;2--核心原理&#34;&gt;2.  核心原理&#xA;&lt;/h2&gt;&lt;h3 id=&#34;11-倒排索引inverted-index&#34;&gt;1.1 倒排索引(Inverted Index)&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;原理&lt;/strong&gt;：通过词项(&lt;strong&gt;Term&lt;/strong&gt;)映射到文档表，实现快速全文检索&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;构建过程&lt;/strong&gt;：文档分词→生成词项→记录词项所在文档及位置&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;优势&lt;/strong&gt;：高效查询，支持复杂搜索(如布尔逻辑、短语匹配)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;与正排索引对比&lt;/strong&gt;：正排索引通过文档 ID 查找内容，倒排索引通过词项找文档&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;12-分布式架构&#34;&gt;1.2 分布式架构&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;em&gt;分片(Shard)：&lt;/em&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;主分片(Primary)&lt;/strong&gt;*：*处理写操作，数量创建索引时固定&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;副本分片(Replica)&lt;/strong&gt;：提供读高可用，数量可调整&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;节点角色&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Master 节点&lt;/strong&gt;：管理集群状态(如索引创建、节点上下线)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data 节点&lt;/strong&gt;：存储分片，处理数据 CURD&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Coordinating 节点&lt;/strong&gt;：路由请求，聚合结果(默认所有节点均可担任)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Ingest 节点&lt;/strong&gt;：&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;数据预处理&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;功能&lt;/strong&gt;：通过定义 &lt;strong&gt;Pipeline&lt;/strong&gt;(处理管道)，对原始数据进行加工，例如：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;解析结构&lt;/strong&gt;：如将日志中的非结构化文本解析为结构化字段(使用&lt;code&gt;Grok&lt;/code&gt; 处理器)。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;字段转换&lt;/strong&gt;：如转换时间格式、大小写转、类型转换(字符串转数字)。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;数据增强&lt;/strong&gt;：如添加地理位置信息、基于 IP 生成 GeoIP 字段。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;字段过滤&lt;/strong&gt;：删除无用字段、重命名字段。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;条件处理&lt;/strong&gt;：根据字段内容动态决定是否执行某些操作。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;减轻数据节点负载&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;职责分离&lt;/strong&gt;：将计算密集型的预处理任务从 Data 节点剥离，避免影响索引和查询功能。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;资源优化&lt;/strong&gt;：专用 Ingest 节点可配置更高 CPU 资源，专注于数据处理。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;简化架构&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;替代部分 Logstash 功能&lt;/strong&gt;：在不需要复杂 ETL 的场景中，可直接通过 Elasticsearch 完成数据处理，减少外部组件依赖。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;13-近实时nrtnear-real-time&#34;&gt;1.3 近实时(NRT，Near Real-Time)&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Refresh 机制&lt;/strong&gt;：内存缓冲区数据每隔一秒(默认)生成新 Segment(文件系统缓存)，实现可搜索&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Translog 持久化&lt;/strong&gt;：写入操作记录到事务日志，定期 Flush 到磁盘保证数据安全&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;14-查询流程&#34;&gt;1.4 查询流程&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;客户端发起请求&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;请求类型&lt;/strong&gt;：根据需求，客户端可能发起 Get 请求(通过 ID 获取文档)或 &lt;strong&gt;Search&lt;/strong&gt; 请求(复杂查询)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;目标节点&lt;/strong&gt;：客户端将请求发送到集群中的任意节点，该节点默认担任&lt;strong&gt;协调节点(Coordinating Node&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;请求路由与分片定位&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Get by ID&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;协调节点通过&lt;strong&gt;路由算法&lt;/strong&gt;(如&lt;code&gt;hash(_id) % number_of_shards&lt;/code&gt; )确定文档所在分片&lt;/li&gt;&#xA;&lt;li&gt;直接向该分片的&lt;strong&gt;主分片或副本分片&lt;/strong&gt;发送请求(副本分片负载均衡)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Search 请求&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;若查询未指定路由，协调节点将请求广播到索引的&lt;strong&gt;所有分片&lt;/strong&gt;(主分片或副本分片)&lt;/li&gt;&#xA;&lt;li&gt;若指定路由参数，仅查询关联的分片&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分片本地查询(Query Phase)&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;分片处理&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;每个分片在本地执行查询，使用&lt;strong&gt;倒排索引&lt;/strong&gt;快速匹配词项&lt;/li&gt;&#xA;&lt;li&gt;对于搜索请求，分片返回&lt;strong&gt;匹配文档的 ID 和排序值&lt;/strong&gt;(如相关性评分)&lt;/li&gt;&#xA;&lt;li&gt;分片可能使用缓存(如&lt;strong&gt;分片请求缓存&lt;/strong&gt;)加速查询&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;结果返回&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;各分片返回本地排序后的 &lt;strong&gt;Top N 结果&lt;/strong&gt;(N 有&lt;code&gt;size&lt;/code&gt; 参数决定)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;全局结果合并(Coordinating Node)&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;排序与筛选&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;协调节点收集所有分片的中间结果，按全局排序规则(如相关性评分)合并&lt;/li&gt;&#xA;&lt;li&gt;筛选最终** Top N 文档的 ID 列表 **(例如用户请求的 &lt;code&gt;size=10&lt;/code&gt; )&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分页处理&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;深度分页优化&lt;/strong&gt;：若使用&lt;code&gt;from + size&lt;/code&gt; ，协调节点需要合并所有分片的&lt;code&gt;from + size&lt;/code&gt; 条数据，内存开销大。推荐使用 &lt;strong&gt;Search After&lt;/strong&gt; 或 &lt;strong&gt;Scroll API&lt;/strong&gt; 替代&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;获取文档详情(Fetch Phase)&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;二次请求&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;协调节点根据筛选后的文档 ID，向对应分片发送 &lt;strong&gt;Multi-Get 请求&lt;/strong&gt;获取完整文档内容&lt;/li&gt;&#xA;&lt;li&gt;分片返回文档的原始数据(如&lt;code&gt;_source&lt;/code&gt; 字段)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;结果聚合&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;协调节点将最终结果组装，返回给客户端&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;实时性处理&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;新写入文档可见性&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;搜索请求&lt;/strong&gt;：依赖 &lt;strong&gt;Refresh 机制&lt;/strong&gt;(默认1秒生成新 Segment)，未刷新前不可被搜索&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Get 请求&lt;/strong&gt;：通过实施读取 &lt;strong&gt;Translog&lt;/strong&gt; 可立即获取最新文档，无需等待 Refresh&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;容错与负载均衡&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;副本分片利用&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;读请求优先分发到副本分片，分担主分片压力，提升吞吐量&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;故障恢复&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;若某分片不可用，协调节点自动重试其它副本分片&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;缓存机制优化&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;分片请求缓存&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;缓存聚合结果或频繁查询的响应(仅对不含&lt;code&gt;now&lt;/code&gt; 或动态参数的查询生效)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;字段数据缓存&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;用于排序和聚合的字段数据缓存在内存，加速计算&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;15-写入流程&#34;&gt;1.5 写入流程&#xA;&lt;/h3&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;客户端发起写入请求&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;请求类型&lt;/strong&gt;：可以是单文档写入(&lt;code&gt;PUT /index/_doc/1&lt;/code&gt; )、批量写入(&lt;code&gt;Bulk API&lt;/code&gt; )或更新/删除操作&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;协调节点选择&lt;/strong&gt;：客户端将请求发送到任意节点(默认作为协调节点)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;路由计算与主分片定位&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;路由规则&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;若指定文档 ID，使用哈希算法：&lt;code&gt;hash(_id) % number_of_shards&lt;/code&gt; 确定目标分片&lt;/li&gt;&#xA;&lt;li&gt;若未指定 ID(自动生成 ID)，Elasticsearch 会随机选择主分片&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分片定位&lt;/strong&gt;：协调节点根据路由结果，将请求转发到该主分片所在的** Data 节点**&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;主分片写入处理&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;3.1 写入内存缓冲去&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;内存缓冲区(Index Buffer)&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;文档首先被写入主分片的&lt;strong&gt;内存缓冲区&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;此时数据&lt;strong&gt;不可被搜索&lt;/strong&gt;（尚未生成 Segment）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分词与索引构建&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;对文档字段进行分词（根据 mapping 定义的分词器）&lt;/li&gt;&#xA;&lt;li&gt;生成倒排序索引的临时数据结构&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;3.2 写入 Translog (事务日志)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Translog 作用&lt;/strong&gt;：确保数据未持久化到磁盘前不会丢失&#xA;&lt;ul&gt;&#xA;&lt;li&gt;所有写入操作会&lt;strong&gt;同步追加&lt;/strong&gt;到 Translog&lt;/li&gt;&#xA;&lt;li&gt;Translog 默认每次请求后刷新(&lt;code&gt;index.translog.durability: request&lt;/code&gt; )，保证可靠性&lt;/li&gt;&#xA;&lt;li&gt;可配置为异步刷新(&lt;code&gt;async&lt;/code&gt;)以提高性能，但可能丢失部分数据&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;3.3 副本分片同步(Replication)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;同步模式&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;主分片&lt;/strong&gt;将写入操作并行发送到所有&lt;strong&gt;副本分片&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;副本分片执行相同的写入流程(写入内存缓冲区 + Translog)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;写入确认条件&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;默认要求&lt;strong&gt;多数分片成功&lt;/strong&gt;(&lt;code&gt;wait_for_active_shards: quorum&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;若副本分片写入失败，主分片会重试，最终可能标记副本分片为失效&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;返回客户端响应&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;成功条件&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;主分片和副本分片均为完成内存和 Translog 写入后，协调节点向客户端返回&lt;code&gt;acknowledged: true&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;失败处理&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;若副本分片不可用，主分片仍会写入，但集群状态变为&lt;code&gt;yellow&lt;/code&gt; (副本未分配)&lt;/li&gt;&#xA;&lt;li&gt;客户端可能收到&lt;code&gt;ShardFailureException&lt;/code&gt; (需重试或处理异常)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;近实时搜索实现(Refresh)&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Refresh机制&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;默认每个&lt;strong&gt;1秒&lt;/strong&gt;(&lt;code&gt;index.refresh_interval&lt;/code&gt; )，内存缓冲区的数据会生成新的 &lt;strong&gt;Lucene Segment&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Segment 写入&lt;strong&gt;文件系统缓存&lt;/strong&gt;(非磁盘)，此时数据可被搜索&lt;/li&gt;&#xA;&lt;li&gt;Refresh 操作开销较大，高频写入场景可适当调大间隔(如30秒)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;6&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;数据持久化(Flush)&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Flush 触发条件&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Translog 大小达到阈值(默认512MB，&lt;code&gt;index.translog.flush_threshold_size&lt;/code&gt; )&lt;/li&gt;&#xA;&lt;li&gt;时间间隔(默认30分钟，&lt;code&gt;index.translog.sync_interval&lt;/code&gt; )&lt;/li&gt;&#xA;&lt;li&gt;手动调用&lt;code&gt;_flush&lt;/code&gt; API&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;持久化过程&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;清空内存缓冲区，将所有 Segment 持久化到磁盘&lt;/li&gt;&#xA;&lt;li&gt;清空当前 Translog，生成新的 Translog 文件&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Segment 只读&lt;/strong&gt;：写入磁盘后不再修改，删除操作通过&lt;code&gt;.del&lt;/code&gt; 文件标记&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;7&#34;&gt;&#xA;&lt;li&gt;Segment 合并(Merge)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;后台优化&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;多个 Segment 会被合并为更大的 Segment，提升查询性能&lt;/li&gt;&#xA;&lt;li&gt;合并过程自动触发，删除过期文档(如标记为删除的文档)&lt;/li&gt;&#xA;&lt;li&gt;合并期间可能占用较多I/O和 CPU 资源&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;8&#34;&gt;&#xA;&lt;li&gt;&lt;strong&gt;容错与恢复机制&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;节点宕机恢复&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;重启后，通过重放 Translog 恢复未持久化的数据&lt;/li&gt;&#xA;&lt;li&gt;若主分片宕机，集群选举新的主分片(优先选择最新数据的副本)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;数据一致性&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用&lt;code&gt;_seq_no&lt;/code&gt; 和&lt;code&gt;_primary_term&lt;/code&gt; 保证写入顺序和冲突解决&lt;/li&gt;&#xA;&lt;li&gt;写入时可通过&lt;code&gt;version&lt;/code&gt; 参数实现乐观锁控制&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;3--倒排索引的底层实现&#34;&gt;3.  倒排索引的底层实现&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;3.1 核心数据结构&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;词典(Term Dictionary)&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用** FST(有限状态转换机)** 压缩存储词项，减少内存占用(Lucene 6.0 后默认)。&lt;/li&gt;&#xA;&lt;li&gt;支持快速前缀查询(如通配符&lt;code&gt;*&lt;/code&gt;)，但需权衡内存与查询性能。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;倒排列表(Postings List)&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;DocID 列表&lt;/strong&gt;：使用差值编码(Delta Encoding)和 **Frame Of Reference(FOR)**压缩。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;原始ID：100, 200, 300 → 差值：100, 100, 100 → 压缩为单值100 + 重复次数。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;词频(TF)与位置(Position)&lt;/strong&gt;：使用**位压缩(Bit Packing)和游程编码(RLE)**。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;3.2 倒排索引的局限性&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;更新代价高&lt;/strong&gt;：文档修改需要重建索引，适合读多写少场景。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;内存压力&lt;/strong&gt;：字段数据缓存(如排序字段)可能引发堆内存溢出(需结合&lt;code&gt;doc_values&lt;/code&gt; 优化)。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;4-分布式设计的深度剖析&#34;&gt;4. 分布式设计的深度剖析&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;4.1 分片策略的权衡&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;分片数选择&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;过少&lt;/strong&gt;：单分片数据量大，扩容困难，写入易成瓶颈。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;过多&lt;/strong&gt;：元数据管理开销大(每个分片是独立 Lucence 索引)，查询合并成本高。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;黄金法则&lt;/strong&gt;：单个分片大小建议在** 10-50GB **，结合数据增长速率设计。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;路由优化&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;自定义路由&lt;/strong&gt;：指定&lt;code&gt;routing&lt;/code&gt; 参数将相关文档存入同一分片，提升查询效率。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-Plain&#34; data-lang=&#34;Plain&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PUT /logs/_doc/1?routing=node-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{ &amp;#34;message&amp;#34;: &amp;#34;error in node-1&amp;#34; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;弊端&lt;/strong&gt;：可能导致数据倾斜(如某个路由值数据量过大)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;4.2 分布式一致性模型&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;写入一致性&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;参数&lt;/strong&gt;：&lt;code&gt;wait_for_active_shards&lt;/code&gt; (默认为&lt;code&gt;quorum&lt;/code&gt; ，即&lt;code&gt;(主分片数+副本数)/ 2 + 1)&lt;/code&gt; 。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;场景&lt;/strong&gt;：若副本分片故障，主分片写入成功后仍返回成功，但集群状态为&lt;code&gt;yellow&lt;/code&gt; 。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;读一致性&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;默认最终一致性&lt;/strong&gt;：主分片写入成功后，副本分片可能短暂落后。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;强制读主分片&lt;/strong&gt;：设置&lt;code&gt;preference=_primary&lt;/code&gt; ，但牺牲性能。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;4.3 脑裂问题与防范&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;原因&lt;/strong&gt;：网络分区导致多个 Master 节点被选举。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;解决方案&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;discovery.zen.minimun_master_nodes&lt;/code&gt; (ES 7.x前)：设置为&lt;code&gt;(master 节点数 / 2)+ 1&lt;/code&gt; 。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;5-查询流程深度优化&#34;&gt;5. 查询流程深度优化&#xA;&lt;/h2&gt;&lt;p&gt;5.1 &lt;strong&gt;Query 与 Filter 的执行差异&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Query 上下文&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;计算相关性评分(&lt;code&gt;score&lt;/code&gt;)，无法缓存，适合全文搜索&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;代价&lt;/strong&gt;：频繁访问到排序索引，CPU 消耗高。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Filter 上下文&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;仅判断是否匹配，结果可缓存(使用&lt;code&gt;bitset&lt;/code&gt;)，适合精准过滤。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;优化技巧&lt;/strong&gt;：将范围查询、&lt;code&gt;term&lt;/code&gt; 查询至于&lt;code&gt;filter&lt;/code&gt; 中。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;5.2 &lt;strong&gt;聚合(Aggregation)的底层实现&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;全局排序限制&lt;/strong&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;terms&lt;/code&gt; 聚合默认返回每个分片的 Top 结果再合并，可能导致精度损失。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;解决方案&lt;/strong&gt;：设置&lt;code&gt;size: 10000&lt;/code&gt; + &lt;code&gt;shard_size: 50000&lt;/code&gt; (增加分片级计算量)。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;内存控制&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;聚合结果构建在堆内存中，需监控&lt;code&gt;fielddata&lt;/code&gt; 使用(避免&lt;code&gt;CircuitBreaker&lt;/code&gt; 触发)。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;5.3 &lt;strong&gt;查询性能优化&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;索引设计&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用&lt;code&gt;keyword&lt;/code&gt; 类型替代&lt;code&gt;text&lt;/code&gt; ，避免分词开销。&lt;/li&gt;&#xA;&lt;li&gt;禁用&lt;code&gt;_all&lt;/code&gt; 字段(ES 6.0+默认禁用，替换为&lt;code&gt;copy_to&lt;/code&gt; )。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;查询重写&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;布尔查询顺序&lt;/strong&gt;：高选择性条件(如&lt;code&gt;term&lt;/code&gt; )放在前面，减少后续计算量。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;分页替代方案&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Search After&lt;/strong&gt;：利用上一页的排序值(如&lt;code&gt;@timestamp&lt;/code&gt; )避免深分页。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Scroll API&lt;/strong&gt;：创建快照上下文，适合离线导出(但消耗资源)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;6-高级调优参数&#34;&gt;6. 高级调优参数&#xA;&lt;/h2&gt;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;参数&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;作用&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;&lt;strong&gt;推荐值&lt;/strong&gt;&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;indices.memory.index_buffer_size&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;控制索引缓冲区大小(堆内存百分比)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;10%(默认)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;index.refresh_interval&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;刷新间隔，影响搜索实时性&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;30s&lt;/code&gt;(写入优化场景)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;index.translog.flush_threshold_size&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Translog刷盘阈值&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;1gb&lt;/code&gt;(高吞吐场景)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;index.merge.scheduler.max_thread_count&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;合并线程数(需 SSD 支持)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;4&lt;/code&gt;(默认)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;strong&gt;search.max_buckets&lt;/strong&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;聚合返回的最大桶数&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;100000&lt;/code&gt;(大数据聚合场景)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;6-架构运行相关流程图&#34;&gt;6. 架构运行相关流程图&#xA;&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;images/10ae25fa-00a2-4642-a1ce-f58cfdad9224.svg&#34; &gt;drawio&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;快速问答&#34;&gt;快速问答&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Translog 如何保证数据安全？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Translog 使用追加写入(Append-Only)模式，避免随机写磁盘的性能问题&lt;/li&gt;&#xA;&lt;li&gt;通过 fsync 系统调度强制刷盘(依赖&lt;code&gt;index.translog.durability&lt;/code&gt; 配置)&lt;/li&gt;&#xA;&lt;li&gt;崩溃恢复：节点重启时，通过 Translog 重放未持久化到 Lucene Segment 的操作&lt;/li&gt;&#xA;&lt;li&gt;源码关联：&lt;code&gt;org.elasticsearch.index.translog.Translog&lt;/code&gt; 类处理日志的写入与恢复&lt;/li&gt;&#xA;&lt;li&gt;与 Lucene Commit 的关系：Flush 操作会将内存数据生成 Segment 并刷盘，同时清除已提交的 Translog&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;使用 Bulk API、调大 Refresh 间隔&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;实战案例：在日志系统中，将&lt;code&gt;refresh_interval&lt;/code&gt; 设为&lt;code&gt;30s&lt;/code&gt; ，写入吞吐量提升 3 倍，但需接受搜索延迟&lt;/li&gt;&#xA;&lt;li&gt;参数调优：调整&lt;code&gt;indices.memory.index_buffer_size&lt;/code&gt; (默认 10% 堆内存)增加索引缓冲区&lt;/li&gt;&#xA;&lt;li&gt;硬件影响：使用 SSD 减少 Flush 耗时，避免写入瓶颈&lt;/li&gt;&#xA;&lt;li&gt;监控工具：通过 Kibana Monitoring 观察&lt;code&gt;indexing_rate&lt;/code&gt;和&lt;code&gt;merge_time&lt;/code&gt; ，针对性优化&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Elasticsearch 和关系型数据库的写入区别&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;数据模型：ES 时 Schema-less 的文档模型，支持动态字段；关系数据库需预定义 Schema&lt;/li&gt;&#xA;&lt;li&gt;事务性：ES 不支持 ACID 事务，依赖版本号(&lt;code&gt;_version&lt;/code&gt; )实现乐观锁&lt;/li&gt;&#xA;&lt;li&gt;写入延迟：ES 的 NRT(近实时)vs 数据库的实时可见&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Refresh 机制对写入性能的影响&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Refresh 操作将内存缓冲区中的数据生成新的 Lucene Segment，写入文件系统缓存(非磁盘)，使数据可被搜索)&lt;/li&gt;&#xA;&lt;li&gt;频繁 Refresh 会导致产生大量小 Segment，增加 Merge 开销(I/O 和 CPU 竞争)&lt;/li&gt;&#xA;&lt;li&gt;日志数据：设置&lt;code&gt;refresh_interval: 30s&lt;/code&gt; 甚至&lt;code&gt;-1&lt;/code&gt; (关闭自动 Refresh)，通过手动 Refresh 控制搜索可见性&lt;/li&gt;&#xA;&lt;li&gt;高查询压力：避免长时间不 Refresh，否则新数据无法被搜索&lt;/li&gt;&#xA;&lt;li&gt;监控指标：通过&lt;code&gt;_nodes/states/indices/&lt;/code&gt; API 观察&lt;code&gt;refresh_tatol&lt;/code&gt; 和&lt;code&gt;refresh_time_in_millis&lt;/code&gt; ，评估 Refresh 开销&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;主分片与副本分片的写入同步&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;主分片写入成功后，会并行向所有副本分片发送写入请求&lt;/li&gt;&#xA;&lt;li&gt;副本分片写入成功后，主分片才向客户端返回确认&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;wait_for_active_shards: quorm&lt;/code&gt; (默认)：多数分片(主 + 副本)可用时写入成功&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;wati_for_active_shards: 1&lt;/code&gt; ：仅主分片成功即可(风险：副本可能落后)&lt;/li&gt;&#xA;&lt;li&gt;若副本分片写入失败，主分片会向 Master 节点报告，触发分片重分配&lt;/li&gt;&#xA;&lt;li&gt;集群状态变为&lt;code&gt;Yellow&lt;/code&gt; ，直到副本恢复&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;设计一个支持亿级日志写入的系统，你会如何规划 ES 集群？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;分片设计：按时间滚动索引(如&lt;code&gt;logs-2023-10&lt;/code&gt; )，单个分片大小控制在 50GB 以内&lt;/li&gt;&#xA;&lt;li&gt;写入优化：使用 Bulk API，客户端侧实现批量压缩与重试机制&lt;/li&gt;&#xA;&lt;li&gt;硬件规划：独立 Ingest 节点处理数据预处理，Data 节点使用 NVMe SSD&lt;/li&gt;&#xA;&lt;li&gt;可靠性：设置&lt;code&gt;index.translog.durability: async&lt;/code&gt; ，副本数设为 1&lt;/li&gt;&#xA;&lt;li&gt;监控：通过 ILM(索引生命周期管理)自动归档旧索引到冷存储&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;为什么 Elasticsearch 查询比数据库快？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;倒排序索引：快速定位文档，避免全表扫描。&lt;/li&gt;&#xA;&lt;li&gt;分布式并行：查询拆分到多个分片并行执行。&lt;/li&gt;&#xA;&lt;li&gt;文件系统缓存：Segment 文件缓存在 OS Cache，减少磁盘 IO。&lt;/li&gt;&#xA;&lt;li&gt;列式存储(&lt;code&gt;doc_values&lt;/code&gt; )：优化排序与聚合。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;如何处理数据一致性问题？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;写入一致性：通过&lt;code&gt;wait_for_active_shards&lt;/code&gt; 控制最小成功分片数。&lt;/li&gt;&#xA;&lt;li&gt;版本控制：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用&lt;code&gt;_version&lt;/code&gt; 实现乐观锁，避免并发覆盖。&lt;/li&gt;&#xA;&lt;li&gt;外部版本号(&lt;code&gt;version_type=external&lt;/code&gt; )兼容数据库同步。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;读一致性：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;preference=_primary&lt;/code&gt; ：强制读主分片(强一致性，性能低)。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;replication=async&lt;/code&gt; ：异步副本更新(最终一致性，性能高)。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;如何设计一个高可用 ES 集群？&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;节点角色分离：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;专用 Master 节点（3台，避免脑裂）。&lt;/li&gt;&#xA;&lt;li&gt;独立 Data 节点、Ingest 节点、Coordination 节点。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;分片策略：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;副本数≥1，跨机架分布（&lt;code&gt;awareness&lt;/code&gt; 参数）。&lt;/li&gt;&#xA;&lt;li&gt;使用ILM（索引生命周期管理）自动滚动索引。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;容灾备份：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;快照（Snapshot）到 S3/NFS，支持跨集群恢复。&lt;/li&gt;&#xA;&lt;li&gt;多集群同步（CCR，跨集群复制）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;</description>
        </item></channel>
</rss>
