ElasticSearch 的核心功能

news/2024/12/28 1:54:13/

要深入理解 ElasticSearch 的核心功能,需要全面掌握其 全文搜索分析聚合索引生命周期管理(ILM) 的设计原理和实际应用。


1. 全文搜索

ElasticSearch 的全文搜索是其核心功能之一,依赖于倒排索引和强大的分词、相关性评分机制。

(1) 倒排索引
  • 倒排索引是 ElasticSearch 的底层数据结构,记录每个词条(term)在哪些文档中出现。
  • 优化了基于关键词的搜索性能。
(2) 分词(Analysis)

ElasticSearch 提供灵活的分词机制,将文档字段分解为独立的词条。

  • 分词器(Analyzer):
    • 包括字符过滤器、分词器、和词条过滤器。
    • 示例:Text: "The quick brown fox"
      • 字符过滤器:去除 HTML 标签等。
      • 分词器:["The", "quick", "brown", "fox"]
      • 词条过滤器:去除停用词,如 ["quick", "brown", "fox"]
  • 常用分词器:standardsimplewhitespacengram
(3) 查询 DSL

ElasticSearch 提供强大的查询语言:

  • match 查询: 适用于全文检索,分词后匹配。
    {"query": {"match": {"content": "quick fox"}}
    }
    
  • term 查询: 精确匹配,不分词。
  • 布尔查询: 将多个子查询组合,使用 mustshouldfilter 等。
(4) 相关性评分

ElasticSearch 使用 BM25 算法计算文档与查询的相关性,基于以下因素:

  • 词频(TF): 词在文档中出现的次数。
  • 逆文档频率(IDF): 词的稀有程度。
  • 字段长度: 长字段对匹配的影响更小。

2. 分析(Analysis)

ElasticSearch 不仅支持全文搜索,还提供强大的数据分析功能,帮助用户从大规模数据中提取有价值的洞见。

(1) 聚合框架

聚合(Aggregation)是一种用于分组、计算和统计数据的机制。

  • 分类:

    • 桶(Bucket): 按条件对文档分组,如按日期、地理位置。
    • 度量(Metric): 统计数据的数值特征,如最大值、最小值、平均值。
    • 管道(Pipeline): 对其他聚合的结果进行二次处理。
  • 示例:计算每月销售额

    {"aggs": {"monthly_sales": {"date_histogram": {"field": "sale_date","calendar_interval": "month"},"aggs": {"total_sales": {"sum": {"field": "amount"}}}}}
    }
    
(2) 实时和分布式处理
  • ElasticSearch 的分布式架构允许在多节点上并行执行聚合,显著提高性能。
(3) 向量搜索(Vector Search)

支持基于嵌入向量的相似性搜索,特别适用于推荐系统和自然语言处理(NLP)任务。


3. 聚合(Aggregation)

(1) 常见聚合类型
  1. 计数(Count):
    • 统计文档数量。
  2. 求和(Sum):
    • 计算字段值的总和。
  3. 平均值(Avg):
    • 计算字段值的平均值。
  4. 分布分析:
    • 按字段值分组,计算分布情况。
(2) 使用场景
  • 数据报表: 如按地域分布的用户量。
  • 性能监控: 按时间段计算指标变化。
  • 日志分析: 计算错误日志出现的频率。

4. 索引生命周期管理(ILM)

(1) 什么是 ILM?

索引生命周期管理(Index Lifecycle Management,ILM)用于自动管理索引的生命周期,降低存储和性能成本。
索引的生命周期通常分为以下阶段:

  • 热(Hot): 索引写入和搜索频繁。
  • 温(Warm): 索引只读,搜索频率降低。
  • 冷(Cold): 索引使用频率非常低。
  • 删除(Delete): 索引到达保留期限后被删除。
(2) ILM 策略

定义一个 ILM 策略包含以下部分:

  • 触发条件: 如索引大小、时间。
  • 动作(Action): 例如关闭索引、迁移分片、删除索引。

示例策略:

{"policy": {"phases": {"hot": {"actions": {"rollover": {"max_size": "50gb","max_age": "30d"}}},"warm": {"actions": {"shrink": {"number_of_shards": 1}}},"cold": {"actions": {"allocate": {"include": {"data": "cold"}}}},"delete": {"actions": {"delete": {}}}}}
}
(3) 使用场景
  • 日志管理: 定期归档和删除旧日志。
  • 成本优化: 热数据使用 SSD,冷数据使用 HDD。

总结

ElasticSearch 的核心功能以全文搜索为基础,同时提供灵活的数据分析能力(聚合)、优化的分布式架构以及对索引生命周期的精细管理。结合实际应用场景,ElasticSearch 可以处理从实时搜索到复杂分析的大量任务,在企业搜索引擎、日志管理、推荐系统等领域发挥关键作用。


http://www.ppmy.cn/news/1558666.html

相关文章

Unity设置中文

安装好Unity Hub,下载好Unity后点击后面的小齿轮添加模块 选择简体中文安装,我已经安装好了 进入Unity编辑器 - 菜单上 Edit - Preference - Language - 选择 简体中文 这样编辑器就是中文版的了

使用 Three.js 创建一个 3D 人形机器人仿真系统

引言 在这篇文章中,我们将探讨如何使用 Three.js 创建一个简单但有趣的 3D 人形机器人仿真系统。这个机器人可以通过键盘控制进行行走和转向,并具有基本的动画效果。 技术栈 HTML5Three.jsJavaScript 实现步骤 1. 基础设置 首先,我们需要…

Taro小程序开发性能优化实践

我们团队在利用Taro进行秒送频道小程序的同时,一直在探索性能优化的最佳实践。随着需求的不断迭代,项目中的性能问题难免日积月累,逐渐暴露出来影响用户体验。适逢双十一大促,我们趁着这个机会统一进行了Taro性能优化实践&#xf…

《大话Java+playWright》系列教程初级篇-初识

后续代码会整理开源-大家期待吧!!! 首先讲下为啥不用python,因为不想下载各种安装插件,太麻烦了,好多不兼容。 所以选择了java。 先来讲下什么是playwright,playwright是微软开源自动化测试工…

HarmonyOS NEXT 实战之元服务:静态案例效果---电动车电池健康状况

背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: import { authentication } …

golang, go sum文件保证下载的依赖模块是一致的

在 Go 编程语言中,go.sum 文件是 Go 模块管理的一部分,主要用于记录模块的校验信息(模块版本的校验和)。它的设计目标是确保模块的完整性和安全性,解决以下关键问题: 1. 确保模块版本的一致性 go.sum 文件…

浏览器点击视频裁剪当前帧,然后粘贴到页面

废话不多说&#xff0c;直接上代码 <template><div class"index"><button click"getImage">截取</button><video id"myVideo" width"320" height"240" src"../assets/a.mp4" contro…

音视频入门知识(七):时间戳及其音视频播放原理

七、时间戳 解码时间戳DTS和显示时间戳PTS 解码时间戳&#xff08;DTS&#xff09; 定义&#xff1a;读入内存中的比特流在什么时候开始送入解码器中进行解码 作用&#xff1a;DTS 主要应用在编码视频流中&#xff0c;其中 B 帧&#xff08;双向预测帧&#xff09;和 P 帧&…