ElasticSearch7.6 入门学习(一)

一、ElasticSearch概述

ES是一个基于Lucene(信息检索工具包)做一些封装和增强的可扩展的的分布式全文检索引擎,几乎是实时存储和检索数据。本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。它的目的是通过简单的RestFul API来 隐藏Lucene的复杂性,从而让全文搜索变得简单,已经成为排名第一的搜索引擎类应用

应用场景:涉及到搜索的应用都可以使用ElasticSearch(大数据量)。

二、ElasticSearch 对比 Solr

  1. ES基本是开箱即用(解压即可用),而solr安装复杂。
  2. Solr利用Zookeeper进行分布式管理,而ES自身带有分布式协调管理功能。
  3. Solr支持更多格式的数据,比如JSON, XML, CSV,而ES只支持JSON,小而精。
  4. Solr提供的功能更多,而ES更注重核心功能,高级功能可以依赖第三方插件如IK,图形化界面kibana。
  5. Solr查询快,但更新索引时慢(即插入删除慢),用于传统搜索应用如电商等查询多。
    ES建立索引快,即实时性查询快,用于新兴的实时搜索应用如百度,新浪等搜索。
  6. Solr比较成熟,有更大的社区,而ES更新快,学习成本高。

架构选型:

  • 当单纯的对已有数据进行搜索时,Solr更快。
  • 当实时建立索引时,Solr会产生IO阻塞,查询性能较差。ElasticSearch具有明显的优势。
  • 随着数据量的增加,Solr的搜索效率会变得更低。ElasticSearch却没有明显的变化。

三、ElasticSearch核心概念

ES是面向文档的,对比关系型数据库。

MySQL ElasticSearch
数据库(database) 索引(index)
表(tables) 类型(types)
数据行(rows) 文档(documents)
数据列(columns) 字段(fileds)
约束(schema) 映射(Mapping)

ElasticSearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行记录),每个文档中又包含多个字段(列)。

3.1 近实时
从写入数据到可以被搜索到有一个小延迟(大概1s),基于ES执行搜索和分析可以达到秒级(倒排索引)。

3.2 集群(Cluster)
一个集群至少有一个节点,而一个节点就是一个ES进程。节点可以有多个索引。如果创建索引,那么索引将会有5个分片(Primary主分片)构成的,每个主分片会有一个副本(Replica复制分片)。
ElasticSearch7.6 入门学习(一)_第1张图片
如上图是一个有三个节点的集群,可以看到集群内只有一个索引,有5个主分片P0-5,5个复制分片R0-5,而且主分片和对应的复制分片都不会在同一个节点中,这样有利于某个节点挂掉了,数据不至于丢失。实际上,一个分片就是一个Lucene索引,一个包含倒排索引的文件目录。

3.3 倒排索引
ES使用的是一种称为倒排索引的结构,采用Lucene倒排索引作为底层,一个分片就是一个Lucene索引。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。 倒排索引使得ES在不扫描全部文档的情况下,就能告诉你哪些文档包含特定的关键字。

现有两个文档,每个文档包含如下内容:

  • Study every day, good good up to forever # 文档1包含的内容
  • To forever, study every day, good good up # 文档2包含的内容
    为了创建倒排索引,首先要将每个文档拆分成独立的词(词条/tokens),然后创建一个包含所有不重复的词条的排序列表,列处每个词条出现在哪个文档:
    ElasticSearch7.6 入门学习(一)_第2张图片
    现在搜索to forever,只需要查看包含每个词条的文档 score
    ElasticSearch7.6 入门学习(一)_第3张图片
    两个文档都匹配,但是第一个文档比第二个匹配度更高,如果没有别的条件,这两个包含关键字的文档都将返回。

3.4 节点(Node)
节点也有名称(默认是随机分配的),节点名称很重要(在执行运维管理操作时)。默认节点会加入一个名称为ElasticSearch的集群,如果直接启动一堆节点,那么他们会自动组成一个ElasticSearch集群。一个节点也可以组成一个ElasticSearch集群。

3.5 索引(数据库,index)
索引包含一堆相似结构的文档数据,比如一个客户索引,订单索引。一个索引包含多个文档,一个index代表一类相似或相同的document。

3.6 类型(表,type)
6.x版本,ES规定只能一个索引只能有一个type;7.x版本默认使用_doc作为type;官方说在8.x版本会彻底移除type。type是index中的一个逻辑数据分类。一个type下的document都有相同的field。比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type。

3.7 文档(数据行,document)
文档是ES中最小的数据单元。一个document可以是一条客户数据,通常用JSON结构表示,每个index下的type中,可以存储多个document。

3.8 字段(数据列,field)
字段是ES的最小单元。一个document中可以有多个field,每个field就是一个数据字段。

3.9 映射(约束,Mapping)
数据如何存放到索引对象上,需要有一个映射配置,包括:数据类型,是否存储,是否分词。

例如,创建一个名为blog的index,type不需要单独创建,在创建Mapping时指定就可以。Mapping用来定义document中的每个字段的类型,即所使用的analyze,是否索引等属性。
ElasticSearch7.6 入门学习(一)_第4张图片

四、了解ELK

ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为Elastic Stack。

  • Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。
  • Logstash是ELK 的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。
  • Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。

实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据分析和收集的场景,日志分析和收集只是更具有代表性。
ElasticSearch7.6 入门学习(一)_第5张图片

你可能感兴趣的:(ElasticSearch)