Elasticsearch

elasticsearch

  • 1.初识elasticsearch
    • [1.1 elasticsearch的作用](#1.1 elasticsearch的作用)
    • [1.2 elasticsearch和lucene的关系](#1.2 elasticsearch和lucene的关系)
    • [1.3 目前流行的搜索引擎技术排名](#1.3 目前流行的搜索引擎技术排名)
    • [1.4 为什么使用elasticsearch作为搜索引擎](#1.4 为什么使用elasticsearch作为搜索引擎)
  • 2.倒排索引
    • [2.1 正排索引和倒排索引](#2.1 正排索引和倒排索引)
  • 3.Elasticsearch概念
    • [3.1 文档和字段](#3.1 文档和字段)
    • [3.2 索引和映射](#3.2 索引和映射)
    • [3.3 mysql和elasticsearch](#3.3 mysql和elasticsearch)

1.初识elasticsearch

1.1 elasticsearch的作用

elasticsearch是一款非常强大的开源搜索引擎, 可以帮助我们从海量数据中快速找到需要的内容

1.2 elasticsearch和lucene的关系

elasticsearch底层是基于lucene来实现的

  • 1999年, DougCutting研发了lucene
  • 2004年, Shay Banon基于Lucene开发了Compass
  • 2010年, Shay Banon重写了Compass, 取名为Elasticsearch

1.3 目前流行的搜索引擎技术排名

虽然在早期,Apache Solr是最主要的搜索引擎技术,但随着发展elasticsearch已经渐渐超越了Solr,独占鳌头

1.4 为什么使用elasticsearch作为搜索引擎

  • 全文检索
  • 分布式性能

1.全文检索

Elasticsearch是专门针对全文搜索场景设计的搜索引擎, 具有优秀的全文搜索性能, 可以对文本内容进行全面和灵活的搜索, 包括单词匹配、短语匹配、模糊搜索等。它还支持基于分析器的文本处理,包括分词、词干提取和同义词处理,从而提高搜索结果的准确性和相关性。

它的全文检索优势, 得益于这几个方面:

  • 倒排索引: 使用了倒排索引来存储文档和词项之间的关系
  • 分词和词项处理: 在索引文档时, Elasticsearch会对文本内容进行分词, 并将词项存储在倒排索引中。这些分词和词项处理技术可以帮助提高搜索结果的准确性和相关性
  • 复杂查询支持: Elasticsearch支持丰富的查询语法和功能,包括布尔查询、短语查询、模糊查询、范围查询等。它还支持多字段查询、字段加权、近似匹配等高级功能,能够满足各种复杂的搜索需求
  • 近实时搜索: 在文档被索引后几乎立即就可以进行搜索, 而传统数据库在插入新记录或更新现有记录时, 会更新索引, 新的数据可能无法立即被搜索到, 有一段延迟, 不够实时

2.分布式性能

使用 MySQL 来处理搜索请求,可能会面临以下问题:

  • 单点故障: MySQL 是一个传统的关系型数据库,通常是基于单节点架构设计的。如果搜索请求过多,单个 MySQL
    节点可能会成为瓶颈,导致系统性能下降甚至崩溃。
  • 水平扩展困难: 虽然 MySQL
    支持主从复制和分区等方式来提高性能和可用性,但是在面对大规模数据和高并发请求时,很难实现有效的水平扩展,而且需要投入大量的人力和资源。

相比之下,如果使用 Elasticsearch 来处理搜索请求,则可以获得更好的分布式性能:

  • 分布式存储和搜索: Elasticsearch 是基于分布式架构设计的,数据被分散存储在多个节点上,并且可以水平扩展以处理大规模数据。当用户发起搜索请求时,Elasticsearch 可以同时在多个节点上执行搜索,并将结果合并返回,从而提高搜索性能和吞吐量。
  • 负载平衡和自动恢复: Elasticsearch 具有良好的负载平衡和自动恢复能力,可以在节点故障或网络分区的情况下保持系统的稳定性和可用性。即使有节点发生故障,Elasticsearch 也能够自动重新分配数据和重新平衡负载,确保系统的正常运行

2.倒排索引

倒排索引有两个非常重要的概念:

  • 文档(Document): 用来搜索的文档数据, 可以是一个商品详情、收货地址等
  • 词条(Term): 对文档内容进行分词后, 得到具备含义的词语就是词条. 例如: 我是中国人, 就可以分为我、是、中国人、中国、国人这些词条

2.1 正排索引和倒排索引

1.正向索引

会将索引字段的值(词条)以及对应的记录信息记录下来, 当进行查询时, 搜索引擎先根据查询条件匹配索引字段的值, 然后根据值找到对应的记录位置, 从而定位到相关的记录

正向索引不支持%索引值%的模糊查询, 因为正向索引是按索引值的顺序存储的, 对于模糊查询, 例如%索引值%, 无法利用索引树的中间节点来快速定位, 最终只能全表扫描, 全表扫描的缺点就是随着数据量增加, 其查询效率也会越来越低。当数据量达到数百万时,就是一场灾难

2.倒排索引

创建倒排索引是对正向索引的一种特殊处理,流程如下:

  1. 文档分词: 对文档中的文本内容进行分词处理, 拆分为一个个词条
  2. 词条关联文档: 对于每个词条, 建立文档列表, 这个文档列表包含每个文档的标识符(例如ID、行号等)
  3. 索引合并、排序: 将所有词条合并起来, 并按词条的字典顺序进行排序. 这样就构建了完整的倒排索引结构


搜索流程:

  1. 用户输入华为手机进行搜索
  2. 对输入内容进行分词, 得到词条: 华为手机
  3. 拿着词条在倒排索引中查找,可以得到包含词条的文档id: 1、2、3
  4. 拿着文档id到正向索引中查找具体文档

两者区别

  • 正排索引
    • 优点
      • 可以给多个字段创建索引
      • 根据索引字段搜索、排序速度非常快
    • 缺点
      • 根据非索引字段, 或者索引字段中的部分词条查找时, 只能全表扫描
  • 倒排索引
    • 优点
      • 根据词条搜索、模糊搜索时,速度非常快
    • 缺点
      • 只能给词条创建索引, 而不是字段
      • 无法根据字段做排序

3.Elasticsearch概念

3.1 文档和字段

  • 文档: elasticsearch是面向文档(Document)存储的, 可以是数据库中的一条商品数据, 一个订单信息, 文档数据会被序列化为json格式后存储在elasticsearch中
  • 字段: Json文档中往往包含很多的字段(Field), 类似于数据库中的列。

3.2 索引和映射

  • 索引: 相同类型的文档的集合, 相当于数据库中的表
  • 映射: 约束文档的字段信息, 类似于数据库中的表结构

3.3 mysql和elasticsearch

Mysql Elasticsearch 说明
Table Index 索引, 就是同类文档的集合, 类似于数据库的表
Row Document 文档, 就是一条条记录, 类似于数据库中的一行数据, 文档都是JSON格式
Column Field 字段, 就是JSON文档中的字段, 类似数据库中的列
Schema Mapping Mapping(映射)是索引中文档的约束, 例如字段类型约束. 类似数据库的表结构(Schema)
SQL DSL DSL是elasticsearch提供的JSON风格的请求语句, 用来操作elasticsearch, 实现CRUD
  • Mysql: 擅长事务类型操作, 可以确保数据的安全和一致性
  • Elasticsearch: 擅长海量数据的搜索、分析、计算

因此在企业中,往往是两者结合使用:

  • 对安全性要求较高的写操作, 使用mysql实现
  • 对查询性能要求较高的搜索需求, 使用elasticsearch实现
  • 两者再基于某种方式,实现数据的同步,保证一致性
相关推荐
PersistJiao1 小时前
在 Spark RDD 中,sortBy 和 top 算子的各自适用场景
大数据·spark·top·sortby
2301_811274311 小时前
大数据基于Spring Boot的化妆品推荐系统的设计与实现
大数据·spring boot·后端
Yz98761 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
青云交1 小时前
大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)
大数据·数据清洗·电商数据·数据整合·hive 数据导入·多源数据·影视娱乐数据
武子康2 小时前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs
武子康2 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
时差9532 小时前
Flink Standalone集群模式安装部署
大数据·分布式·flink·部署
锵锵锵锵~蒋2 小时前
实时数据开发 | 怎么通俗理解Flink容错机制,提到的checkpoint、barrier、Savepoint、sink都是什么
大数据·数据仓库·flink·实时数据开发
二进制_博客2 小时前
Flink学习连载文章4-flink中的各种转换操作
大数据·学习·flink
大数据编程之光2 小时前
Flink入门介绍
大数据·flink