分布式搜索引擎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)
相关文章
|
4月前
|
消息中间件 缓存 Java
消息中间件RabbitMQ(基础)
RabbitMQ是基于AMQP协议的开源消息中间件,使用Erlang语言开发,实现应用解耦、异步通信与流量削峰。通过生产者、消费者、交换机、队列等组件,支持多种消息模型,如简单队列、发布订阅、路由匹配等,提升系统性能与可靠性。
130 0
|
5月前
|
缓存 运维 监控
一次内存诊断,让资源利用率提升 40%:揭秘隐式内存治理
阿里云云监控 2.0 推出 SysOM 底层操作系统诊断能力,基于 eBPF + BTF 协同分析,无需侵入业务,即可一键完成从物理页到文件路径、再到容器进程的全栈内存归因,让“黑盒内存”无所遁形。
767 98
|
4月前
|
人工智能 程序员 API
GPT-5.2来了,老金详细给你说说它为什么是王
OpenAI悄然上线GPT-5.2,因谷歌Gemini 3发布引发“红色警报”。新模型提升显著:幻觉减少38%,上下文达40万token,支持长文档精准处理;ARC-AGI-2与GDPval评测显示其真实推理与工作能力大幅增强,尤其适合金融、法律等专业场景。推出Instant、Thinking、Pro三版本,满足不同需求。虽无惊艳发布,但聚焦打工人实际应用,标志着AI向通用生产力工具迈进。
539 11
|
6月前
|
测试技术
哪里不对改哪里!全能图像编辑模型Qwen-Image-Edit来啦
Qwen-Image-Edit基于20B Qwen-Image模型,融合视觉语义与外观控制,支持中英文文字精准编辑、风格迁移、IP创作等多重功能,具备SOTA性能,助力低门槛、高精度图像编辑。
2945 23
|
8月前
|
存储 人工智能 NoSQL
万字解码 Agentic AI 时代的记忆系统演进之路
本文深入探讨了在 Agentic AI 时代,记忆(Memory) 作为智能体核心能力的定义、构建与技术演进。
2394 9
万字解码 Agentic AI 时代的记忆系统演进之路
|
4月前
|
人工智能 测试技术 API
GPT-5.2与Gemini 3.0终极抉择:谁更适配你的需求?
GPT-5.2与Gemini 3.0巅峰对决:前者全场景强势,推理精准,适配专业高负载任务;后者垂直深耕多模态与研究场景,性价比突出。性能、成本、生态各异,选择关键在于匹配自身需求——追求极致能力选GPT-5.2,注重实用成本选Gemini 3.0。
545 0
|
4月前
|
存储 缓存 NoSQL
分布式缓存Redis(高级)
本课程深入讲解Redis高级应用,涵盖持久化机制(RDB/AOF)、主从同步、哨兵集群、分片集群搭建与故障转移,结合SpringBoot实战RedisTemplate集成,助力掌握高可用、高性能的分布式缓存架构设计与落地。
702 0
|
4月前
|
自然语言处理
主流大模型结构
本文介绍了四大模型架构:Encoder-Decoder、Decoder-Only、Encoder-Only和Prefix-Decoder,涵盖代表模型与应用场景。详解GPT系列演进、LLaMA发展及主流中文大模型,并对比GPT-4、LLaMA-3、Qwen等在架构、参数量与上下文长度等方面的异同。
|
4月前
|
数据采集 监控 NoSQL
用n8n打造自愈型用例库与质量知识图谱
三年前,测试团队困于臃肿用例库与信息孤岛。我们基于n8n构建自愈型质量管理系统,打通需求、缺陷与测试数据,实现用例自动修复、智能推荐与持续优化,让质量知识自主进化。
|
4月前
|
JSON 监控 API
1688查询榜单列表API开发指南
1688查询榜单列表API提供热门商品、类目销售排行等多类型榜单数据,支持实时更新,助力电商选品、市场分析与决策。返回商品ID、标题、价格、销量等关键信息,数据格式为JSON,编码UTF-8,适用于多种业务场景。