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


    Elasticsearch

    本文对非关系型数据库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 进行深分页查询
  • 相关阅读:
    什么是协程?
    Java 操作 Excel:生成数据、设置单元格样式、设置数据有效性(hutool)
    hermite、三次样条插值算法 调用matlab函数、代码实现
    Docker 容器
    UI组件DevExpress ASP.NET Core v22.1亮点 - 甘特图、UI组件全新升级
    力扣在线OJ——栈和队列
    MATLAB算法实战应用案例精讲-【工具篇】运筹优化工具OR-TOOLS(附实现代码)
    R语言拟合ARIMA模型并使用拟合模型进行预测推理、使用autoplot函数可视化ARIMA模型预测结果(返回的对象为ggplot2对象)
    ssm+vue+elementUI 电子资源管理系统-#毕业设计
    RSA的C++语言描述简单实现
  • 原文地址:https://blog.csdn.net/qq_50604294/article/details/139946832