秋招Java后端开发冲刺——非关系型数据库篇(Elasticsearch)

06-29 1114阅读

Elasticsearch

本文对非关系型数据库Elasticsearch的基础知识及常见面试问题进行介绍。

秋招Java后端开发冲刺——非关系型数据库篇(Elasticsearch)
(图片来源网络,侵删)
(一)基础知识

1. Elasticsearch 是一个基于 Apache Lucene 的分布式、高扩展、高实时的搜索与数据分析引擎适用于各种数据类型,包括文本、数值、日期等。

2. 核心组件

  • Kibana:可视化工具,用于展示和分析数据
  • Logstash:数据收集和处理管道工具
  • Beats:轻量级数据采集器,用于将数据发送到 Elasticsearch

    3. 特点

    特点描述
    全文搜索提供强大的全文搜索功能,包括复杂查询、排名和相关性评分。
    分布式架构设计为分布式架构,可以通过增加节点来水平扩展集群。
    实时索引和搜索允许近乎实时的索引和搜索,确保数据能够快速更新和检索。
    多种数据类型支持支持结构化和非结构化数据,包括文本、数字、日期、地理位置等。
    强大的分析能力通过聚合功能,对大数据集进行复杂的分析和统计。
    高可用性通过分片和副本机制,提供数据的高可用性和故障恢复能力。
    水平可扩展性可以通过添加节点来轻松扩展集群容量,支持处理大规模数据。
    RESTful API提供基于 HTTP 的 RESTful API,方便与各种应用集成。
    生态系统丰富与 Kibana、Logstash 和 Beats 等工具无缝集成,形成一个完整的数据解决方案。
    自动分片和复制自动管理分片和副本分配,简化运维工作。
    安全性提供细粒度的访问控制、安全通信和审计功能(通过 X-Pack 等插件)。
    多语言支持支持多种语言的文本分析和搜索,包括中文、英文、法文等。

    4.存储结构

    • JSON 文档:文档是 Elasticsearch 中的最小数据单元(类似于数据库中的行),以 JSON 格式存储。每个文档都有一个唯一的标识符(ID)和一个所属的索引
    • 倒排索引:是搜索引擎的核心数据结构,用于快速查找包含某个词项的所有文档。它由词典(Term Dictionary)和词项列表(Postings List)组成

      ① 词典:存储所有的词项

      ② 词项列表:包含每个词项在文档中的位置和频率信息

    • 存储字段(Stored Fields):存储每个文档的原始 JSON 数据
    • 文档值(Doc Values):存储数值型、日期型和地理位置等字段,优化这些字段的检索效率,用于排序和聚合操作的专用存储结构,独立于倒排索引

      5. 集群

      (1)一个 Elasticsearch 集群由一个或多个节点组成,这些节点共同工作以存储数据和提供搜索功能。集群有一个唯一的名字,通过这个名字可以识别和加入集群。

      (2)组成

      • 主节点(Master Node):负责管理集群的元数据(例如索引和分片的分配)
      • 数据节点(Data Node):存储数据并处理搜索和聚合请求
      • 协调节点(Coordinating Node):处理客户端请求,分发到适当的数据节点,不存储数据
      • 专用节点:如专用主节点、专用数据节点、专用协调节点和专用机器学习节点

        6.分片和副本

        (1)分片是 Elasticsearch 中用于水平拆分索引数据的基本单位。每个分片本质上是一个独立的 Lucene 索引,可以存储在不同的节点上。

        (2)分类

        • 主分片(Primary Shard):索引的主要分片,所有文档首先写入主分片
        • 副本分片(Replica Shard):主分片的复制品,用于提供故障恢复和负载均衡

          (3)分片创建:在创建索引时,可以指定主分片和副本分片的数量。

          在这里插入代码片PUT /my_index
          {
            "settings": {
              "number_of_shards": 3,
              "number_of_replicas": 2
            }
          }
          

          注:主分片的数量在创建索引后不能更改,而副本分片的数量可以在任何时候调整。

          (4)分片分配

          • Elasticsearch 会自动将分片分配到集群中的不同节点,以实现数据的均匀分布和高可用性
          • 在节点故障或新节点加入时,分片会被重新分配以保持集群的平衡

            (5)分配策略

            • 轮询分配:分片轮流分配到不同节点,以均衡负载
            • 故障恢复:在节点故障时,主节点会将受影响的分片重新分配到其他节点
            • 数据重定位:在新节点加入时,主节点会重新分配分片以利用新节点的存储和计算资源
              (二)常见问题

              1. Elasticsearch的主要应用

              (1)全文搜索

              Elasticsearch 最常见的应用之一是全文搜索。它可以在大量文本数据中快速找到相关文档,支持复杂查询和排序。

              • 网站搜索:为网站提供内部搜索功能,用户可以通过关键词快速找到所需信息
              • 文档管理:在文档库中进行全文搜索,方便用户查找特定内容

                (2)日志和事件数据分析

                Elasticsearch 可以处理和分析大量日志和事件数据,帮助企业进行实时监控和故障排除。

                • 日志管理和分析:与 Logstash 和 Kibana 集成,构建 ELK(Elasticsearch, Logstash, Kibana)栈,用于收集、分析和可视化日志数据
                • 安全信息和事件管理(SIEM):用于实时监控和分析安全事件,快速检测和响应安全威胁

                  (3)应用程序性能监控(APM)

                  通过收集和分析应用程序的性能数据,Elasticsearch 帮助开发和运维团队监控应用程序性能,识别瓶颈并优化性能。

                  • APM 解决方案:如 Elastic APM,提供端到端的性能监控和分析,包括请求追踪、错误报告和性能指标

                    (4)数据分析和可视化

                    Elasticsearch 强大的聚合功能使其成为大数据分析和可视化的理想工具。

                    • 业务智能(BI):进行复杂的数据分析和统计,生成商业报告和洞察
                    • 实时分析:实时处理和分析流数据,支持快速决策和响应

                      (5)电商搜索和推荐系统

                      Elasticsearch 被广泛应用于电子商务平台,提供强大的搜索和推荐功能,提升用户体验和转化率。

                      • 产品搜索:快速响应用户查询,提供相关产品的搜索结果。
                      • 个性化推荐:基于用户行为和历史数据,提供个性化的产品推荐。

                        (6)地理空间搜索

                        Elasticsearch 支持地理空间数据,可以进行地理位置相关的搜索和分析。

                        • 地图和位置服务:在地图应用中查找附近的地点或设施
                        • 地理围栏:基于地理位置触发特定事件或通知

                          (7)社交媒体分析

                          通过分析社交媒体数据,帮助企业了解用户行为和市场趋势。

                          • 情感分析:分析用户对产品或服务的评论和反馈,了解用户情感倾向
                          • 话题趋势分析:识别和分析热门话题,帮助制定营销策略

                            (8)金融数据分析

                            在金融行业,Elasticsearch 用于分析交易数据、市场数据和风险管理。

                            • 交易监控:实时监控和分析交易数据,识别异常交易行为。
                            • 市场趋势分析:分析市场数据,预测市场趋势和价格波动。

                              2. Elasticsearch 数据的备份与恢复

                              (1)Elasticsearch 提供了快照和恢复(Snapshot and Restore)功能,用于备份索引数据到一个远程存储库,并在需要时从这些快照中恢复数据。

                              (2)快照是某一时刻的索引数据的完整副本。

                              (3)恢复快照时,可以选择恢复全部索引或特定索引,并指定目标索引名称。

                              (4)快照管理

                              • 定期备份:定期创建快照以确保数据的持续保护
                              • 监控快照状态:使用 Elasticsearch 的监控工具或 API 监控快照创建和恢复的状态
                              • 存储库管理:定期清理和管理快照存储库,删除不再需要的快照

                                3. Elasticsearch 的查询 DSL(Domain Specific Language)

                                (1)查询 DSL(Domain Specific Language)是一种功能强大的 JSON 风格的查询语言,允许用户构建复杂的搜索请求。

                                (2)基本结构

                                • 查询上下文:用于计算文档的相关性评分,适用于全文搜索
                                • 过滤器上下文:用于筛选文档,判断文档是否匹配条件,不计算相关性评分

                                  (3)查询类型

                                • Match Query:用于全文搜索,查找与查询文本匹配的文档
                                • Term Query:用于精确匹配,查找字段中包含确切值的文档
                                • Range Query:用于查找字段值在指定范围内的文档
                                • Bool Query:用于组合多个查询,包含 must(必须匹配)、should(应匹配)、must_not(必须不匹配)和 filter(过滤)子句
                                • Phrase Match Query:用于查找包含确切短语的文档
                                • Wildcard Query:用于查找与通配符模式匹配的文档
                                • Term Filter:用于筛选字段中包含确切值的文档
                                • Range Filter:用于筛选字段值在指定范围内的文档
                                • Exists Filter:用于筛选字段存在的文档

                                  4. 如何处理 Elasticsearch 中的慢查询

                                  • 慢查询日志:Elasticsearch 提供了慢查询日志,可以用来记录执行时间超过阈值的查询。其 Elasticsearch 可以分别为索引和搜索操作设置慢查询日志。
                                  • Profiling API:Elasticsearch 提供了 Profile API,可以详细分析查询的执行步骤和时间

                                    5. Elasticsearch 优化查询

                                    • 避免使用复杂和嵌套查询:简化查询结构,减少不必要的嵌套查询
                                    • 使用过滤器:在 bool 查询中,使用 filter 而不是 must,因为过滤器不计算相关性评分,性能更高
                                    • 字段映射优化:为常用搜索字段设置合适的类型和分析器,避免非必要的全文搜索
                                    • 使用多字段(Multi-Fields):在一个字段上应用多种分析方式
                                    • 深分页(Deep Pagination):避免深度分页,因为它会导致大量数据传输。使用 search_after 或 scroll 进行深分页查询
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]