Saul's blog Saul's blog
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)

Saul.J.Wu

立身之本,不在高低。
首页
后端
分布式
前端
更多
分类
标签
归档
友情链接
关于
GitHub (opens new window)
  • Java入门基础

  • Java核心基础

  • 设计模式

  • Web开发

  • SpringBoot

  • 微服务

  • Elasticsearch

    • ElasticSearch-简介
      • 什么是Elasticsearch?
      • Elasticsearch 的用途是什么?
      • Elasticsearch 的工作原理是什么?
      • 基本概念
        • 1、Index(索引)
        • 2、Type(类型)
        • 3、Document(文档)
        • 4、倒排索引机制
      • 总结
    • Elasticsearch-安装
    • Elasticsearch-_cat
    • Elasticsearch-新增数据
    • Elasticsearch-查询数据&乐观锁
    • Elasticsearch-更新文档
    • Elasticsearch-删除操作
    • Elasticsearch-Bulk 批量 API
    • Elasticsearch-Search API
    • Elasticsearch-Query DSL
    • Elasticsearch-aggregations聚合分析
    • Elasticsearch-mapping映射
    • Elasticsearch-分词
    • SpringBoot整合Elasticsearch Rest Client
    • 商品上架与ES
  • 运维

  • 后端
  • Elasticsearch
SaulJWu
2020-11-20

ElasticSearch-简介

# 什么是Elasticsearch?

Elasticsearch是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。Elasticsearch在Apache lucenne的基础上开发而成,由Elasticsearch N.V(即现在的Elastic)于2010年首次发布。Elasticsearch以其简单的REST风格API、分布式结构、速度和可拓展性和文明,是Elastic Stack的核心组件;Elastic Stack是适用于数据采集、充实、存储、分析和可视化的一组开源工具。人们通常将Elastic Stack称为ELK Stack(代指Elasticsearch、Logstash和Kibana),目前 Elastic Stack 包括一系列丰富的轻量型数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。

也就是用来做数据检索和分析的,开源的Elasticsearch是目前全文搜索引擎的首选。

Elastic的底层是开源库Lucene。但是,你没法直接用Lucene,必须自己写代码去调用它的接口。Elastic是Lucene的封装,提供了REST API的操作接口,开箱即用。

学习好Elastic建议去官方文档学习,因为资料是最新的。

官方文档: https://www.elastic.co/guide/index.html

# Elasticsearch 的用途是什么?

Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:

  • 应用程序搜索
  • 网站搜索
  • 企业搜索
  • 日志处理和分析
  • 基础设施指标和容器监测
  • 应用程序性能监测
  • 地理空间数据分析和可视化
  • 安全分析
  • 业务分析

mysql不行吗?

其实mysql也行,但是术业有专攻,mysql专攻于数据持久化存储和管理,也就是CRUD。真正要做海量数的检索和分析,它可以秒级从海量数据中检索出我们想要的数据。而mysql如果单表达到百分级数据,检索是非常慢的。

如果用mysql来做电商商品检索,mysql是承受不了这么大的压力。

# Elasticsearch 的工作原理是什么?

原始数据会从多个来源(包括日志、系统指标和网络应用程序)输入到 Elasticsearch 中。数据采集指在 Elasticsearch 中进行索引之前解析、标准化并充实这些原始数据的过程。这些数据在 Elasticsearch 中索引完成之后,用户便可针对他们的数据运行复杂的查询,并使用聚合来检索自身数据的复杂汇总。在 Kibana 中,用户可以基于自己的数据创建强大的可视化,分享仪表板,并对 Elastic Stack 进行管理。

# 基本概念

image-20201124105112926

类比到MySQL中

  • 索引类似数据库
  • 类型类似数据表
  • 文档类似数据
  • 属性类似列

# 1、Index(索引)

动词:相当于MySQL中的insert;

名词:相当于MySQL中的Database;

# 2、Type(类型)

在Index(索引)中,可以定义一个或多个类型。

类似于MySQL中的Table;每一种类型的数据放在一起;

# 3、Document(文档)

保存在某个索引(Index)下,某种类型(Type)的一个数据(Document),文档是JSON格式的,Document就像是MySQL中的某个Table里面的内容;

# 4、倒排索引机制

词 记录
红海 1,2,3,4,5
行动 1,2,3
探索 2,5
特别 3,5
记录篇 4
特工 5

在Elasticsearch保存数据时,首先第一步是分词。

**分词:**将整句分拆为单词(当然也有可能拆分为红,海,行,动四个字)

保存的记录

  1. 红海行动

  2. 探索红海行动

  3. 红海特别行动

  4. 红海记录篇

  5. 特工红海特别探索

检索:

在检索的时候,也会把要搜索的内容分词

假设检索:

  • 红海特工行动?

  • 红海行动?

只要记录里面,包含一个或多个单词,都会查出来,所以最终返回1,2,3,4,5

但是,哪个才是真正想要的?

相关性得分:

Elasticsearch,会把搜索的内容分词,去数据库中找,根据命中的词,会得到相关性得分。

可能命中了2/3,也可能是1/4,会根据这个得分倒序返回。

如果要用MySQL来解决这种情况,SQL就要写得非常麻烦了,要用多个like。

# 总结

ES可以快速存储、搜索和分析海量数据,ES的数据默认放到内存中进行海量分析和检索,非常快的。当然数据来源都是MySQL,最后还要将MySQL的数据存到ES中。

  • 索引对应于MySQL的数据库
  • 类型对应于MySQL的数据表
  • 文档对应于MySQL的数据
  • 属性对应于MySQL的列

所有数据都是JSON格式,并且采用倒排索引机制

帮我改善此页面 (opens new window)
#Elasticsearch#全文检索#分析#分布式
上次更新: 2021/11/16, 01:58:01
分布式组件 SpringCloud Alibaba 简单接触
Elasticsearch-安装

← 分布式组件 SpringCloud Alibaba 简单接触 Elasticsearch-安装→

最近更新
01
zabbix学习笔记二
02-28
02
zabbix学习笔记一
02-10
03
Linux访问不了github
12-08
更多文章>
Theme by Vdoing | Copyright © 2020-2022 Saul.J.Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式