Elasticsearch的简单介绍

Elasticsearch的简单介绍

Elasticsearch(简称为ES)是一个开源的分布式搜索和分析引擎,建立在Apache Lucene搜索引擎库的基础上,提供了一个强大的全文搜索和分析引擎,适用于各种类型的数据。Elasticsearch最初是为处理大规模文本数据而设计的,但后来扩展到支持结构化数据和地理空间数据等多种数据类型。

官网地址

Elasticsearch的核心特性

  1. 分布式性质: Elasticsearch是一个分布式系统,它使用分片和副本的概念,将数据分散存储在多个节点上,可以轻松地水平扩展,处理大规模的数据集。
  2. 全文搜索: Elasticsearch提供强大的全文搜索功能,支持实时索引和查询。它使用倒排索引(Inverted Index)来加速搜索过程,使得搜索在大规模数据集下仍能迅速响应。
  3. 多数据类型支持: Elasticsearch不仅支持文本数据,还能处理结构化数据、数字数据、日期数据以及地理空间数据。
  4. RESTful API: Elasticsearch使用RESTful API进行与客户端的交互,这使得它易于集成到各种应用中。用什么语言都可以进行开发。
  5. 实时性能: Elasticsearch提供了实时性能,可以在数据变化时立即更新索引。

介绍Elasticsearch肯定是离不开ELK的,那么ELK是什么呢?ELKElasticsearchLogstashKibana) 是一个用于日志管理和数据分析的开源软件栈,主要用途之一是实时日志分析。通过Logstash收集各种来源的日志数据,将其标准化后存储到Elasticsearch中,最后使用Kibana进行可视化和查询。ELK Stack通常用于实时监控、故障排查、性能优化以及安全事件分析等场景。,Elasticsearch前面我们已经介绍过了,接下来简单介绍一下LogstashKibana

ELK Stack

  1. Logstash: Logstash 是一个用于日志和事件数据的收集、转换和传输的工具。它能够从多种来源(如文件、数据库、消息队列)收集数据,对数据进行标准化和转换,然后将其发送到Elasticsearch。
  2. Kibana: Kibana 是一个用于数据可视化的开源平台,允许用户通过 Web 界面对 Elasticsearch 中的数据进行搜索、分析和可视化。Kibana提供了各种图表和仪表板,使用户能够以直观的方式理解和探索其数据。

Elasticsearch的核心概念

  1. 索引(Index): 索引是Elasticsearch中最基本的数据存储单元。它类似于关系数据库中的数据库,用于组织和存储相关的文档。每个索引可以包含一个或多个分片。
  2. 文档(Document): 文档是Elasticsearch中的基本信息单元。它是JSON格式的数据,包含实际的数据和元数据。在关系数据库(MySQL)中,文档可以看作是行(record)。
  3. 类型(Type): 在Elasticsearch 7.x及以上版本中,一个索引只能包含一个类型,通常是"_doc"。在之前的版本中,索引可以包含多个类型,但这种方式已经过时。
  4. 分片(Shard): Elasticsearch将索引分成多个分片,每个分片是一个独立的索引单元,可以分布在不同的节点上。分片的引入使得Elasticsearch能够水平扩展,处理大规模的数据。
  5. 副本(Replica): 为了提高数据的可用性和容错性,Elasticsearch允许为每个分片创建多个副本。副本是分片的复制品,存储在集群中的不同节点上。副本可以代替主分片,处理读取请求或在主分片不可用时提供服务。
  6. 节点(Node): 节点是构成Elasticsearch集群的单个服务器实例。每个节点是独立的,可以存储数据、执行搜索和参与集群管理。节点通过集群协调和通信,共同构成一个完整的Elasticsearch集群。
  7. 集群(Cluster): 集群是由一个或多个节点组成的集合,共同存储和处理数据。集群有一个唯一的名称,节点通过这个名称来加入同一个集群。集群协调工作的节点称为主节点。
  8. 主分片和复制分片: 每个索引的分片都有一个主分片和零个或多个复制分片。主分片负责处理索引的所有写入操作,而复制分片提供了读取操作的冗余和负载均衡。
  9. 映射(Mapping): 映射定义了索引中的文档如何被存储和索引。它类似于关系数据库中的模式,定义了字段的类型、分析器等信息。
  10. 查询(Query): 在Elasticsearch中,查询是用于检索文档的一种方式。Elasticsearch支持丰富的查询DSL(领域特定语言),包括全文搜索、精确匹配、范围查询等。
  11. 分词(Tokenization): 分词是将文本拆分成单词(tokens)的过程。在 Elasticsearch 中,文本字段的值会被分词成一个个单词,这些单词被称为词项(terms)。分词器(Tokenizer)和过滤器(Filter)在此过程中起到关键作用,影响搜索和分析的效果。
  12. **倒排索引(Inverted Index):**在倒排索引中,索引的键是文档中的词项(terms),而值是包含该词项的文档列表。这种结构与传统数据库的索引相反,因此称为倒排索引。

假设有三个文档:

  1. 文档1包含词项 “红色” 和 “运动鞋”
  2. 文档2包含词项 “红色” 和 “T恤”
  3. 文档3包含词项 “篮球” 和 “运动鞋”

倒排索引可能如下所示:

"红色" -> [文档1, 文档2]
"运动鞋" -> [文档1, 文档3]
"T恤" -> [文档2]
"篮球" -> [文档3]

在这个例子中,每个词项都映射到包含它的文档列表。这使得Elasticsearch能够非常迅速地找到包含特定词项的文档,而不需要遍历整个文档集合。

那么为什么进行搜索的时候要使用ES呢,MySQL的模糊匹配不也是可以的么?

我们假设一个业务场景:构建一个电子商务平台,需要实现商品的搜索和推荐功能

业务场景

以下是用Elasticsearch和MySQL的处理

商品搜索:

  • Elasticsearch: 商品搜索是一个关键的功能,用户需要能够通过关键字搜索商品,获取相关性最高的结果。Elasticsearch的全文搜索和分词功能使得在商品的标题、描述中进行模糊搜索。例如,用户搜索 “红色运动鞋” 可以返回标题或描述字段中包含这些关键词的商品。
  • MySQL: 在传统关系型数据库中,可以使用 LIKE 操作进行模糊搜索。但相较于 Elasticsearch,MySQL在处理大量文本数据的全文搜索上性能可能较低。

在这个业务场景中,MySQL需要检索完数据库中的所有信息然后返回命中的数据,当数据量大到千万百万的时候,这种查询的效率无疑是非常低的,而使用Elasticsearch的倒排索引,相当于MySQL搜索方式的反面,根据关键词的分词找到对应的文档,然后直接返回命中的数据。

实时性需求:

  • Elasticsearch: 商品信息更新后,可以几乎实时地反映在搜索结果中。这对于价格调整、库存变动等实时性要求较高的场景非常重要。
  • MySQL: MySQL的实时性受到索引的影响,对于复杂的查询和大量数据,可能需要较长的时间才能完成索引更新。

推荐系统:

  • Elasticsearch: 基于用户的搜索历史、购买记录等信息,可以利用 Elasticsearch 的聚合和分析功能实现个性化商品推荐。例如,给用户推荐与其搜索过的商品相关性较高的其他商品(ELK)。
  • MySQL: 在传统数据库中,实现个性化推荐需要设计和维护复杂的关系表和算法,相较于 Elasticsearch 的聚合和分析功能,可能更为繁琐。

本文主要是一些对Elasticsearch的简单介绍,不涉及DSL教程,都是一些简单的Elasticsearch对索引和对文档的CRUD和集成Elasticsearch,上手比较简单

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值