Elasticsearch介绍和使用

一、Elasticsearch

  1. 强大的搜索和分析能力:
    • Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎。它能够快速地对大量数据进行全文搜索、结构化搜索和复杂的数据分析操作。
    • 对于大型数据集,它可以高效地处理各种查询需求,包括关键词搜索、范围查询、聚合分析等。例如,在电商领域,可以快速搜索商品名称、描述等信息,同时还能对销售数据进行聚合分析,如按时间段统计销售额、销量等。
  2. 分布式架构:
    • Elasticsearch 设计为分布式系统,可以轻松地扩展到处理大规模数据集。它可以将数据分布在多个节点上,实现并行处理和高可用性。
    • 当数据量不断增长时,可以通过添加更多的节点来扩展系统的存储和处理能力,而不会对系统的性能产生显著影响。
    • 这种分布式架构还提供了自动故障转移和数据冗余功能,确保数据的安全性和可靠性。
  3. 实时性:
    • Elasticsearch 支持实时索引和搜索,数据可以在写入后立即被搜索到。这对于需要实时分析数据的场景非常重要。
    • 例如,在日志分析中,可以实时监控系统日志,及时发现问题并进行处理。在金融领域,可以实时分析交易数据,以便做出及时的决策。
  4. 易于使用和集成:
    • Elasticsearch 提供了丰富的 API 和工具,使得开发人员可以轻松地与各种编程语言和技术进行集成。
    • 它还具有友好的用户界面,如 Kibana,可以方便地进行数据可视化和分析。开发人员可以通过简单的配置和查询语句,快速实现复杂的搜索和分析功能。

二、Elasticsearch 结构

  1. 节点(Node):

    • Elasticsearch 集群由一个或多个节点组成。每个节点是一个独立的服务,可以存储数据、处理查询请求,并与其他节点进行通信。
    • 节点可以分为主节点(Master Node)和数据节点(Data Node)。主节点负责管理集群的状态,如分配分片、处理节点加入和离开等。数据节点负责存储数据和执行查询操作。
  2. 索引(Index):

    • 索引是 Elasticsearch 中存储数据的逻辑空间。它类似于关系数据库中的数据库,可以包含多个类型(Type)的文档。
    • 索引由一个或多个分片(Shard)组成,每个分片是一个独立的 Lucene 索引。分片可以分布在不同的节点上,实现数据的分布式存储和并行处理。
  3. 类型(Type):

    • 在一个索引中,可以定义多个类型。类型用于对具有相似结构的文档进行分类。例如,在一个电商索引中,可以定义商品类型和订单类型。
    • 每个类型有自己的映射(Mapping),定义了文档的字段和数据类型。
  4. 文档(Document):

    • 文档是 Elasticsearch 中存储的基本单位。它是一个 JSON 格式的对象,包含了一组字段和对应的值。
    • 文档通过唯一的 ID 进行标识,可以被索引、搜索和更新。
  5. 分片(Shard):

    • 分片是 Elasticsearch 中数据的最小存储单元。每个分片是一个独立的 Lucene 索引,可以分布在不同的节点上。
    • 分片分为主分片(Primary Shard)和副本分片(Replica Shard)。主分片负责存储原始数据,副本分片用于提供数据的备份和高可用性。
  6. 映射(Mapping):

    • 映射定义了文档的字段和数据类型。它类似于关系数据库中的表结构定义。
    • 映射可以在创建索引时指定,也可以在后期动态更新。它包括字段的名称、数据类型、分析器、索引选项等。

三、倒排索引
Elasticsearch 使用倒排索引来实现高效的搜索功能。下面详细介绍其倒排索引原理:

1、什么是倒排索引

倒排索引(Inverted Index)是一种用于快速检索的数据结构。与传统的正向索引(如书籍的目录,根据内容的位置来查找内容)不同,倒排索引是根据内容来查找其位置。在文本搜索领域,倒排索引将每个词(或称为“词条”“术语”)与包含该词的文档列表相关联。

2、Elasticsearch 倒排索引的构成

Elasticsearch 的倒排索引主要由以下几个部分组成:

  1. 词条(Terms):

    • 这是索引中的基本单元,通常是经过分词器处理后的单词或短语。例如,对于文本“Elasticsearch is a powerful search engine”,可能会被分解为“elasticsearch”“is”“a”“powerful”“search”“engine”等词条。
  2. 文档列表(Postings List):

    • 对于每个词条,都有一个对应的文档列表,记录了包含该词条的所有文档的信息。文档信息通常包括文档 ID、词频(Term Frequency,TF,该词条在文档中出现的次数)、位置信息(该词条在文档中的具体位置,例如在句子中的位置)等。
  3. 词典(Dictionary):

    • 词典是所有词条的集合,通常以某种数据结构(如哈希表、B 树等)进行存储,以便快速查找词条。词典的作用是将用户输入的查询词快速转换为对应的词条,然后查找倒排索引中的文档列表。

3、倒排索引的构建过程

  1. 文本分析(Text Analysis):

    • 当向 Elasticsearch 中添加文档时,首先会对文档的内容进行文本分析。这个过程包括分词、去除停用词、词干提取等操作。
    • 分词是将文本分割成一个个独立的词条。例如,“I love Elasticsearch”可能会被分割成“i”“love”“elasticsearch”三个词条。
    • 去除停用词是指去除一些常见的、对搜索意义不大的词,如“a”“the”“is”等。
    • 词干提取是将单词还原为其基本形式,例如将“loves”“loving”“loved”都还原为“love”。
  2. 词条生成与存储:

    • 经过文本分析后,得到的词条会被添加到倒排索引中。如果词条已经存在于词典中,则将当前文档的信息添加到该词条的文档列表中;如果词条不存在,则在词典中创建新的词条,并为其创建一个新的文档列表。
  3. 文档列表更新:

    • 对于每个词条的文档列表,会记录文档 ID、词频和位置信息等。当有新的文档包含该词条时,文档列表会被更新。例如,如果新文档的 ID 为 100,并且包含词条“elasticsearch”,则会在“elasticsearch”的文档列表中添加文档 ID 为 100 的记录,并更新词频和位置信息。

4、倒排索引的搜索过程

  1. 查询分析:

    • 当用户输入查询时,Elasticsearch 会对查询进行与文档添加时类似的文本分析操作,将查询转换为一系列词条。
  2. 词条查找:

    • 根据查询中的词条,在词典中查找对应的文档列表。
  3. 文档评分:

    • 对于每个找到的文档,Elasticsearch 会根据一定的算法计算文档的相关性得分。得分通常考虑因素包括词频(TF,词条在文档中出现的次数)、逆文档频率(Inverse Document Frequency,IDF,衡量词条在整个索引中的稀有程度)、文档长度等。
    • 例如,一个词条在某个文档中出现的次数越多,并且该词条在整个索引中出现的文档越少,那么这个文档的得分就越高,说明它与查询的相关性越大。
  4. 结果排序:

    • 根据文档的得分,对搜索结果进行排序,得分高的文档排在前面。

5、倒排索引的优势

  1. 快速搜索:

    • 倒排索引可以快速定位包含特定词条的文档,大大提高了搜索的效率。无论索引中有多少文档,都可以在很短的时间内返回搜索结果。
  2. 灵活的查询:

    • 支持各种复杂的查询,如全文搜索、短语搜索、布尔查询等。可以根据用户的需求进行精确匹配、模糊匹配、范围查询等操作。
  3. 可扩展性:

    • Elasticsearch 的分布式架构使得倒排索引可以轻松地扩展到处理大规模数据集。可以通过添加更多的节点来扩展索引的存储和处理能力,而不会影响搜索性能。

二、Elasticsearch 的范例
以下是一个使用 Elasticsearch 进行关键词搜索、范围查询和聚合分析的范例。

假设我们有一个电商商品索引,包含商品名称、价格、库存等字段。

一、关键词搜索

查找名称中包含“手机”的商品:

GET /ecommerce/_search
{
  "query": {
    "match": {
      "name": "手机"
    }
  }
}

二、范围查询

查找价格在 1000 到 2000 元之间的商品:

GET /ecommerce/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 1000,
        "lte": 2000
      }
    }
  }
}

三、聚合分析

  1. 统计不同品牌的商品数量:
GET /ecommerce/_search
{
  "size": 0,
  "aggs": {
    "brands": {
      "terms": {
        "field": "brand"
      }
    }
  }
}
  1. 计算平均价格:
GET /ecommerce/_search
{
  "size": 0,
  "aggs": {
    "average_price": {
      "avg": {
        "field": "price"
      }
    }
  }
}

求中位数

假设已经有一个名为“products”的索引,包含“price”字段表示商品价格。可以使用以下命令添加一些示例数据:

POST /products/_doc/1
{
  "price": 10
}

POST /products/_doc/2
{
  "price": 20
}

POST /products/_doc/3
{
  "price": 30
}

POST /products/_doc/4
{
  "price": 40
}

POST /products/_doc/5
{
  "price": 50
}

使用聚合分析计算中位数

可以使用以下查询来计算价格的中位数:

GET /products/_search
{
  "size": 0,
  "aggs": {
    "median_price": {
      "percentiles": {
        "field": "price",
        "percents": [50]
      }
    }
  }
}

在这个查询中,我们使用了百分位聚合,指定了要计算的字段为“price”,并且只计算 50%这个百分位,即中位数。

结果解析

返回的结果类似如下:

{
  "took": 12,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 5,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "median_price": {
      "values": {
        "50.0": 30
      }
    }
  }
}

这里的“50.0”对应我们请求的 50%百分位,值为 30,表示近似的中位数价格是 30。

需要注意的是,这种方法只是近似计算中位数,对于非常大的数据集可能不够准确。在实际应用中,可以根据具体情况调整聚合的设置和使用更复杂的方法来获得更准确的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/890237.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式数据库的进度管理:TiDB 备份恢复工具 PiTR 的原理与实践

导读 对于一款企业级数据库产品而言,数据的安全性和可恢复性是至关重要的。PiTR(Point in Time Restore)作为 TiDB 备份工具的核心功能之一,提供了一种精细的数据恢复能力,允许用户将数据库集群恢复到过去的任意时间点…

1.MySQL存储过程基础(1/10)

引言 数据库管理系统(Database Management System, DBMS)是现代信息技术中不可或缺的一部分。它提供了一种系统化的方法来创建、检索、更新和管理数据。DBMS的重要性体现在以下几个方面: 数据组织:DBMS 允许数据以结构化的方式存…

8.优化存储过程的性能(8/10)

优化存储过程的性能 1.引言 存储过程是数据库系统中预先编写好的SQL语句集合,它们被保存在数据库服务器上,可以在需要时被调用执行。存储过程的使用可以提高数据库操作的效率,减少网络通信,并且可以封装复杂的逻辑,使…

无人机之交互系统篇

一、系统构成 无人机交互系统通常由多个子系统组成,包括但不限于: 多模式人机交互装置:这是人机交互系统的基础层,通常包括计算机、局域网、传感器等设备,用于实现操作员与无人机之间的数据交互和指令传递。例如&…

新型物联网电力数据采集器 智能网关通讯协议有哪些?

随着智能化技术的快速发展,电气监测与管理在各个域的应用愈发重要,在物联网(IoT)应用的发展中,网关扮演着至关重要的角色。它作为连接设备与云平台或数据中心的桥梁,负责数据的收集、处理和传输。网关不仅支…

鸿蒙开发之ArkUI 界面篇 三十四 容器组件Tabs一

当页面较多时,可以通过Tabs组件进行展示,如下图,支持顶部、底部、侧边栏 Tabs页面需两个组件,分别是TabContent和TabBar。TabContent必须有,TabBar是导航标题,可以没有也能显示,只是没有标题提示…

uniapp__微信小程序使用秋云ucharts折线图双轴

1、子组件 <template><view class"charts-box"><qiun-data-charts type"line":opts"computedOpts":chartData"chartData"/></view> </template><script> export default {props: {chartData: {t…

【论文阅读】Learning a Few-shot Embedding Model with Contrastive Learning

使用对比学习来学习小样本嵌入模型 引用&#xff1a;Liu, Chen, et al. “Learning a few-shot embedding model with contrastive learning.” Proceedings of the AAAI conference on artificial intelligence. Vol. 35. No. 10. 2021. 论文地址&#xff1a;下载地址 论文代码…

沉浸式娱乐新纪元,什么是5G+实时云渲染VR大空间解决方案?

近年来&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在娱乐、教育、医疗等多个领域展现出巨大的潜力&#xff0c;尤其是VR大空间体验&#xff0c;更是以其沉浸式和互动性的特点&#xff0c;迅速成为市场的新宠。据Statista数据显示&#xff0c;2023年&#xff0c;全球虚…

【笔记】Day2.5.1查询运费模板列表(未完

&#xff08;一&#xff09;代码编写 1.阅读需求&#xff0c;确保理解其中的每一个要素&#xff1a; 获取全部运费模板&#xff1a;这意味着我需要从数据库中查询所有运费模板数据。按创建时间倒序排序&#xff1a;这意味着查询结果需要根据模板的创建时间进行排序&#xff0…

【Java】集合中单列集合详解(一):Collection与List

目录 引言 一、Collection接口 1.1 主要方法 1.1.1 添加元素 1.1.2 删除元素 1.1.3 清空元素 1.1.4 判断元素是否存在 1.1.5 判断是否为空 1.1.6 求取元素个数 1.2 遍历方法 1.2.1 迭代器遍历 1.2.2 增强for遍历 1.2.3 Lambda表达式遍历 1.2.4 应用场景 二、…

【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

aws(学习笔记第二课) AWS SDK(node js)

aws(学习笔记第二课) 使用AWS SDK&#xff08;node js&#xff09; 学习内容&#xff1a; 使用AWS SDK&#xff08;node js&#xff09; 1. AWS SDK&#xff08;node js&#xff09; AWS支持多种SDK开发(除了AWS CLI&#xff0c;还支持其他的SDK) AndroidPythonNode.js(Javas…

数据结构-C语言顺序栈功能实现

栈 栈&#xff1a;类似于一个容器&#xff0c;如我们生活中的箱子&#xff0c;我们向箱子里放东西&#xff0c;那么最先放的东西是最后才能拿出来的 代码实现 #include <stdio.h> #include <stdlib.h>#define MAX_SIZE 100typedef struct {int* base; // 栈底指针…

[Linux#65][TCP] 详解 延迟应答 | 捎带应答 | 流量控制 | 拥塞控制

目录 一、延迟应答 二、捎带应答 三. 流量控制 总结 四. 拥塞控制 1. 拥塞控制 2. 慢启动机制&#xff1a; 3.思考 4.拥塞避免算法 5. 快速恢复算法 一、延迟应答 1. 立即应答问题 接收数据的主机若立刻返回ACK应答&#xff0c;可能返回的窗口较小。例如&#xff1…

univer实现excel协同

快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&q…

怎么看待数字化转型是大势所趋?

怎么看到数字化转型是大势所趋&#xff1f;下面我结合最新数据给大家讲明白这个事。 近日&#xff0c;我通过大量的数据相关性分析&#xff0c;有了一些关键发现。 【数字化转型】之所以势在必行&#xff0c;主要是因为数字化转型为各个国家数字经济发展提供了重要的参考依据。…

使用js和canvas实现简单的网页贪吃蛇小游戏

玩法介绍 点击开始游戏后&#xff0c;使用键盘上的↑↓←→控制移动&#xff0c;吃到食物增加长度&#xff0c;碰到墙壁或碰到自身就游戏结束 代码实现 代码比较简单&#xff0c;直接阅读注释即可&#xff0c;复制即用 <!DOCTYPE html> <html lang"en"…

SAP将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4]

将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4] 有时需要将Spool中的内容导出成PDF文件&#xff0c;sap提供了一个标准程序RSTXPDFT4可以实现此功能。 1, Tcode:SP01, 进入spool requests list 2, SE38 运行程序RSTXPDFT4 输入spool reqeust号码18680&#xff0c;然后…

im架构分享 即时通讯架构 即时消息 全球架构师峰会im分享 im分布式 企业级im架构 分布式im 即时通讯im架构

1. 之前收藏的淘宝李厉岷老师在全球架构师峰会上做的im技术分享&#xff0c;贴出来备注下。 2. 李老师infoQ主页链接&#xff1a; 李历岷 3. 文章&#xff1a; 电商IM消息系统架构演进_ArchSummit_李历岷_InfoQ精选文章 4. ppt下载地址 &#xff08;注&#xff1a;同期还有…