文章目录

  • 什么是ElasticSearch?
    • Lucene
    • ELK
    • Elasticsearch的特点
    • 应用场景
    • 架构设计
  • 基本概念
    • 文档
    • 类型
    • 索引

什么是ElasticSearch?

Elasticsearch是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。

Elasticsearch在Apache Lucene的基础上开发而成。然而,Elasticsearch不仅仅是Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:

  • 一个分布式的实时文档存储,每个字段都可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持PB级别的结构化或者非结构化数据

Lucene

Lucene是一套用于全文索引和搜索的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜索。但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。

Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库搜索引擎相混淆。

ELK

Elastic Stack是一套适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将Elastic Stack称为ELK Stack(代指 Elasticsearch、Logstash 和 Kibana)。

Elastic Stack

Logstash是什么?

Logstash 是 Elastic Stack 的核心产品之一,可用来对数据进行聚合和处理,并将数据发送到 Elasticsearch。Logstash 是一个开源的服务器端数据处理管道,允许您在将数据索引到 Elasticsearch 之前同时从多个来源采集数据,并对数据进行充实和转换。

Kibana是什么?

Kibana 是一款适用于Elasticsearch的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和地图。Kibana同时还包括诸如 Canvas和Elastic Maps等高级应用程序

  • Canvas允许用户基于自身数据创建定制的动态信息图表,
  • Elastic Maps用来对地理空间数据进行可视化。

Kibana

Elasticsearch的特点

  • Elasticsearch 很快。 由于Elasticsearch是在Lucene基础上构建而成的,所以在全文本搜索方面表现十分出色。Elasticsearch同时还是一个近实时的搜索平台,这意味着从文档索引操作到文档变为可搜索状态之间的延时很短,一般只有一秒。因此,Elasticsearch 非常适用于对时间有严苛要求的用例,例如安全分析和基础设施监测。
  • Elasticsearch 具有分布式的本质特征。Elasticsearch中存储的文档分布在不同的容器中,这些容器称为分片,可以进行复制以提供数据冗余副本,以防发生硬件故障。Elasticsearch的分布式特性使得它可以扩展至数百台(甚至数千台)服务器,并处理 PB 量级的数据。
  • Elasticsearch 包含一系列广泛的功能。 除了速度、可扩展性和弹性等优势以外,Elasticsearch 还有大量强大的内置功能(例如数据汇总和索引生命周期管理),可以方便用户更加高效地存储和搜索数据。
  • Elastic Stack 简化了数据采集、可视化和报告过程。 通过与 Beats 和 Logstash 进行集成,用户能够在向 Elasticsearch 中索引数据之前轻松地处理数据。同时,Kibana 不仅可针对 Elasticsearch 数据提供实时可视化,同时还提供 UI 以便用户快速访问应用程序性能监测 (APM)、日志和基础设施指标等数据。

应用场景

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

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

架构设计

Elasticsearch架构图

  • Gateway:Elasticsearch用来存储索引的文件系统,支持多种类型。ElasticSearch默认先把索引存储在内存中,然后当内存满的时候,再持久化到Gateway里。当ES集群关闭或重启的时候,它就会从Gateway里去读取索引数据。比如LocalFileSystem和HDFS、AS3等。
  • DistributedLucene Directory:Lucene里的一些列索引文件组成的目录。它负责管理这些索引文件。包括数据的读取、写入,以及索引的添加和合并等。
  • Mapping:映射解析模块。
  • Search Moudle:搜索模块。
  • Index Moudle:索引模块。
  • Disvcovery:节点发现模块。不同机器上的节点要组成集群需要进行消息通信,集群内部需要选举master节点,这些工作都是由Discovery模块完成。支持多种发现机制,如 Zen 、EC2、gce、Azure。
  • Scripting:Scripting用来支持在查询语句中插入javascript、python等脚本语言。
  • 3rd plugins:第三方插件。
  • Transport:传输模块,支持多种传输协议,如 Thrift、memecached、http,默认使用http。
  • JMX:JMX是java的管理框架,用来管理ES应用。
  • Java(Netty):java的通信框架。
  • RESTful Style API:提供给用户的接口,通过RESTful方式来实现API编程。

基本概念

Elasticsearch是一个文档型数据库,为了方便理解,下面给出其与传统的关系型数据库的对比

Relational DB Elasticsearch
数据库 Database 索引 Index
表 Table 类型 Type
行 Rows 文档 Document
列 columns 字段 fields
表结构 schema 映射 mapping

文档

Elasticsearch是面向文档的,索引和搜索数据的最小单位是文档,并且使用JSON来作为文档的序列化格式。每个文档可以由一个或多个字段组成,类似于关系型数据库中的一行记录,在Elasticsearch中,文档有几个重要属性

  • 自我包含:一篇文档同时包含字段和对应的值。
  • 层次型:文档中还可以包含新的文档,一个字段的取值也可以包含其他字段和取值。
  • 结构灵活:文档不依赖预先定义的模式。在关系型数据库中,要提前定义字段才能使用,在Elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个新的字段。

尽管我们可以随意的新增或者忽略某个字段,但是,每个字段的类型非常重要,比如一个年龄字段类型,可以是字 串也可以是整形。因为Elasticsearch会保存字段和类型之间的映射及其他的设置。这种映射具体到每个映射的每种类型,这也是为什么在Elasticsearch中,类型有时候也称为映射类型。

类型

类型是文档的逻辑容器,类似于表格是行的容器。在不同的类型中,最好放入不同结构的文档。(有点类似于关系型数据库中的表的概念)。

每个类型中对于字段的定义称为映射。比如name字段映射为string类型。 我们说文档是无模式的,它们不需要拥有映射中所定义的所有字段,例如我们可能会新增一个映射中不存在的字段,那么Elasticsearch是怎么做的呢?

Elasticsearch会自动的将新字段加入映射,由于不确定这个字段是什么类型,Elasticsearch就会根据字段的值来推导它的类型,如果这个值是10,那么Elasticsearch会认为它是整形。 但是这种推导也可能会存在问题,如果这里的10实际上是字符串“10”,如果后续在索引字符串“hello world”,就会因为类型不一致而导致索引失败。 所以最安全的方式就是在索引数据之前,就定义好所需要的映射,这点跟关系型数据库殊途同归了,先定义好字段,然后再使用。

映射类型只是将文档进行逻辑划分。从物理角度来看,同一索引的文档都是写入磁盘,而不考虑它们所属的映射类型。

注意⚠️:为什么ElasticSearch要在7.X版本去掉type?

在Elasticsearch设计初期,是直接查考了关系型数据库的设计模式,存在了类型(表)的概念。 但是,其搜索引擎是基于Lucene的,这种基因决定了类型是多余的。Lucene的全文检索功能之所以快,是因为倒序索引的存在。 而这种倒序索引的生成是基于索引的,而并非 类型。多个类型反而会减慢搜索的速度——两个不同type下的两个user_name,在ES同一个索引下其实被认为是同一个filed,你必须在两个不同的type中定义相同的filed映射。否则,不同type中的相同字段名称就会在处理中出现冲突的情况,导致Lucene处理效率下降。

索引

在Elasticsearch中,索引有两个含义:

  • 名词

    • 索引是映射类型的容器,Elasticsearch中的索引是一个非常大的文档集合,非常类似关系型数据库中库的概念。索引存储了所有映射类型的字段。
  • 动词
    • 索引一个文档就是存储一个文档到一个索引 (名词)中以便被检索和查询。这非常类似于SQL中的INSERT关键词,不同的是文档已存在时,新文档会替换旧文档(UPSERT)。

在Elasticsearch中,索引使用了一种称为倒排索引(即通过查询词索引到文档)的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。

ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念相关推荐

  1. 58技术主席:还原万亿级三高业务场景的设计与实践

    孙玄,前58集团技术委员会主席,前转转二手交易平台首席架构师.今天想跟你聊点儿企业里那些年薪百万的架构师,他们的架构设计思维是如何升级的,我们来聊点儿干的! 01.百万年薪的核心竞争力 作为前58集团 ...

  2. 还原阿里电商、腾讯社交等万亿级业务场景的设计实践

    孙玄,前58集团技术委员会主席,前转转二手交易平台首席架构师.今天想跟你聊点儿企业里那些年薪百万的架构师,他们的架构设计思维是如何升级的,我们来聊点儿干的! 01.百万年薪的核心竞争力 作为前58集团 ...

  3. 1.初识elasticsearch

    1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中 ...

  4. ElasticSearch学习笔记二 初识Elasticsearch

    初识Elasticsearch Elasticsearch简介 Elasticsearch术语及概念 文本(Text) 索引词/精确值(term) 精确值 VS 全文 分析(Analysis)与分析器 ...

  5. ElasticSearch探索之路(六)实战:环境搭建、REST、CRUD、Search

    文章目录 环境搭建 搭建Elasticsearch环境 搭建Kibana环境 基本操作 RESTful CRUD 创建索引 插入文档 查询文档 更新文档 删除文档和索引 Search 查询方式 URL ...

  6. 【Elasticsearch】Elasticsearch 集群 运维 高性能 架构设计 高负载

    1.概述 转载:干货 |<深入理解Elasticsearch>读书笔记 5.集群扩展 如何扩展集群? 5.1 垂直扩展 向Elasticsearch集群添加更多的资源.制约因素--如:JV ...

  7. 重学Elasticsearch第1章 : Elasticsearch, Kibana概念、Elasticsearch相关术语

    文章目录 Elastic Stack 是什么 ElasticSearch 概念 什么是RestFul 什么是全文检索 什么是Elasticsearch ES的应用场景 安装Elasticsearch ...

  8. ElasticSearch第一讲:ElasticSearch从入门到精通

    ElasticSearch第一讲:ElasticSearch从入门到精通 业内目前来说事实上的一个标准,就是分布式搜索引擎一般大家都用elasticsearch.本文是ElasticSearch第一讲 ...

  9. ElasticSearch——手写一个ElasticSearch分词器(附源码)

    1. 分词器插件 ElasticSearch提供了对文本内容进行分词的插件系统,对于不同的语言的文字分词器,规则一般是不一样的,而ElasticSearch提供的插件机制可以很好的集成各语种的分词器. ...

最新文章

  1. 点击图片放大,再点击缩小的代码段
  2. 信息抽取(三)三元关系抽取——改良后的层叠式指针网络,让我的模型F1提升近4%(接上篇)
  3. C语言 | 二维数组
  4. 从零开始写项目第八篇【将未完成的项目发布在Tomcat上】
  5. matlab 文本处理
  6. 命令行BASH的基本操作
  7. lintcode 丢鸡蛋
  8. Halcon图像分割-多个threshold阈值处理算子讲解
  9. 关于机器人方面的sci论文_机器人领域国际期刊(SCI收录)
  10. 怎么用QQ截取右击出来的内容
  11. php网页通过鼠标画图,一个神奇的网站:三步秒速画图,一键鼠标发文章
  12. 泰安中专学校计算机专业,泰安市岱岳区职业中等专业学校
  13. 顺口溜:国足欢迎你(贬)
  14. Android studio 微信界面设计
  15. domino获取邮件中的密送的收件人-字段:Recipients
  16. codeforces 549F Yura and Developers(分治、启发式合并)
  17. 城市建筑类毕业论文文献都有哪些?
  18. I/O复用:select、poll和epoll函数
  19. [C#] 属性的事情
  20. 计算机辅助角膜地形分析系统,角膜地形图的临床应用

热门文章

  1. System类的常用方法
  2. Apollo客户端读取数据原理
  3. 字符串的转换相关方法
  4. SpringBoot_数据访问-JDBC自动配置原理
  5. 单例设计模式-序列化破坏单例模式原理解析及解决方案
  6. 【报错】ValueError: not enough values to unpack expected 2, got1
  7. 200815-C指针高级和链表
  8. 【小知识】System.getProperties()获取系统环境变量
  9. Python 深拷贝和浅拷贝的区别
  10. About Me - 关于