分布式搜索引擎ElasticSearch

简介: ElasticSearch是基于Lucene的分布式开源搜索引擎,支持海量数据的快速检索、日志分析与实时监控。通过倒排索引实现高效模糊查询,结合Kibana、Logstash等组件构成ELK技术栈,广泛应用于搜索、日志统计与系统监控场景。

分布式搜索引擎ElasticSearch

  1. 初识elasticsearch
    1.1.了解ES
    1.1.1.elasticsearch的作用
    elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容,例如:
    在GitHub搜索代码
    在电商网站搜索商品
    在百度搜索答案
    在打车软件搜索附近的车
    1.1.2.ELK技术栈
    elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。 被广泛应用在日志数据分析、实时监控等领域:
    而elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。
    1.1.3.elasticsearch和lucenee
    elasticsearch底层是基于lucene来实现的。 Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。 官网地址:https://lucene.apache.org/
    elasticsearch的发展历史:
    2004年Shay Banon基于Lucene开发了Compass
    2010年Shay Banon 重写了Compass,取名为Elasticsearch。
    1.1.4.为什么不是其他搜索技术?
    目前比较知名的搜索引擎技术排名:
    虽然在早期,Apache Solr是最主要的搜索引擎技术,但随着发展elasticsearch已经渐渐超越了Solr,独占鳌头:
    1.1.5.总结
    什么是elasticsearch?
    一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能
    什么是elastic stack(ELK)?
    是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch
    什么是Lucene?
    是Apache的开源搜索引擎类库,提供了搜索引擎的核心API
    1.2.倒排索引
    倒排索引的概念是基于MySQL这样的正向索引而言的。
    1.2.1.正向索引
    那么什么是正向索引呢? 例如给下表(tb_goods)中的id创建索引:
    如果是根据id查询,那么直接走索引,查询速度非常快。 但如果是基于title做模糊查询,只能是逐行扫描数据,流程如下:
    1)用户搜索数据,条件是title符合"%手机%"
    2)逐行获取数据,比如id为1的数据
    3)判断数据中的title是否符合用户搜索条件
    4)如果符合则放入结果集,不符合则丢弃。 回到步骤1
    逐行扫描,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。 当数据量达到数百万时,就是一场灾难。
    1.2.2.倒排索引
    倒排索引中有两个非常重要的概念:
    文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。 例如一个网页、一个商品信息
    词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。 例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条
    创建倒排索引是对正向索引的一种特殊处理,流程如下:
    将每一个文档的数据利用算法分词,得到一个个词条
    创建表,每行数据包括词条、词条所在文档id、位置等信息
    因为词条唯一性,可以给词条创建索引,例如hash表结构索引
    如图:
    倒排索引的搜索流程如下(以搜索"华为手机"为例):
    1)用户输入条件"华为手机"进行搜索。
    2)对用户输入内容分词,得到词条:华为、手机。
    3)拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。
    4)拿着文档id到正向索引中查找具体文档。
    如图:
    虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快! 无需全表扫描。
    1.2.3.正向和倒排
    那么为什么一个叫做正向索引,一个叫做倒排索引呢?
    正向索引是最传统的,根据id索引的方式。 但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
    而倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。 是根据词条找文档的过程。
    是不是恰好反过来了? 那么两者方式的优缺点是什么呢?
    正向索引:
    优点:
    可以给多个字段创建索引
    根据索引字段搜索、排序速度非常快
    缺点:
    根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。
    倒排索引:
    优点:
    根据词条搜索、模糊搜索时,速度非常快
    缺点:
    只能给词条创建索引,而不是字段
    无法根据字段做排序
    2.小节
    由于ES课程API文档较多,这里统一汇总如下,有需自取
    EN.xmind
    (387 KB)
相关文章
|
8月前
|
消息中间件 缓存 Java
消息中间件RabbitMQ(基础)
RabbitMQ是基于AMQP协议的开源消息中间件,使用Erlang语言开发,实现应用解耦、异步通信与流量削峰。通过生产者、消费者、交换机、队列等组件,支持多种消息模型,如简单队列、发布订阅、路由匹配等,提升系统性能与可靠性。
243 0
|
Shell
我来教你如何将cpu使用率up起来(shell脚本[含注释])
我来教你如何将cpu使用率up起来(shell脚本[含注释])
1870 0
|
9月前
|
缓存 运维 监控
一次内存诊断,让资源利用率提升 40%:揭秘隐式内存治理
阿里云云监控 2.0 推出 SysOM 底层操作系统诊断能力,基于 eBPF + BTF 协同分析,无需侵入业务,即可一键完成从物理页到文件路径、再到容器进程的全栈内存归因,让“黑盒内存”无所遁形。
1274 124
|
9月前
|
机器学习/深度学习 JSON 搜索推荐
1688图片搜索API技术文档
1688图片搜索API(拍立淘)是阿里巴巴官方图像搜货工具,支持通过图片URL或Base64编码查找1688平台同款或相似商品。基于深度学习技术,精准匹配商品ID、标题、价格、销量、供应商等全维度信息,命中率超85%,单次响应≤1秒,支持批量调用与分页排序,适用于电商比价、选品采购等场景。
1108 0
|
8月前
|
存储 缓存 NoSQL
分布式缓存Redis(高级)
本课程深入讲解Redis高级应用,涵盖持久化机制(RDB/AOF)、主从同步、哨兵集群、分片集群搭建与故障转移,结合SpringBoot实战RedisTemplate集成,助力掌握高可用、高性能的分布式缓存架构设计与落地。
820 0
|
11月前
|
监控 搜索推荐 数据挖掘
小红书:对接话题挑战API激发UGC创作,打造爆款内容
小红书话题挑战API助力品牌高效激发UGC,通过自动化创建活动、精准推送与数据分析,降低运营门槛,提升爆款率。结合吸引力主题、激励机制与裂变传播,实现内容生态繁荣,推动品牌增长。
|
存储 人工智能 自然语言处理
|
机器学习/深度学习 算法 安全
Federated Learning
联邦学习(Federated Learning, FL)是一种新兴的分布式机器学习范式,旨在通过“数据不动模型动”的方式,在不共享原始数据的情况下实现多方协同训练,保护数据隐私。本文综述了国内外研究现状,涵盖学术研究和产业应用进展,分析了其核心特征、技术挑战及未来发展方向,为相关领域的研究者和从业者提供参考。
|
测试技术 定位技术 API
万字长文:一文彻底搞懂Elasticsearch中Geo数据类型查询、聚合、排序
万字长文:一文彻底搞懂Elasticsearch中Geo数据类型查询、聚合、排序
96330 143