• ES实战系列-Elasticsearch介绍


    Elasticsearch介绍

    优势

    • 高可用
    • 海量数据搜索、PB级
    • 便于扩展,可以很方便增加一个节点
    • 实时的,延时低于1ms

    全文检索

    Lucene词汇表和架构

    • 文档(Document): 索引和搜索时的主要数据载体,包含一个或多个现存有数据的字段
    • 字段(field): 文档的一部分,包含名称和值两部分
    • 词(term): 一个搜索单元,表示文本中得一个单词
    • 标记(token): 表示在字段中出现词得属性,又词得文本、开始和结束偏移量以及类型组成

    使用案例

    • Github
    • 维基百科
    • 百度

    对比Elasticsearch和Solr

    • Solr利用zookeeper分布式管理,Elasticsearch自带分布式协调管理能力
    • Solr支持更多的数据,ES仅支持json
    • Solr官方提供的功能更多,es有很多第三方插件
    • Solr在传统的搜索应用好于es,es处理实时应用搜索效率更好

    对比Elasticsearch和splunk

    JSON

    • JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,不仅易于人们阅读和编写
    • json基本数据类型
      • 数字:有符号的十进制数字,可能包含小数部分,也可能使用指数E表示法,但不能包括非数字,如NaN。该格式不区分整数和浮点数。
      • 字符串:0个或多个Unicode字符的序列。字符串用双引号分隔,并支持反斜杠转义语法。
      • 布尔值:为true或false的任一值。
      • 数组:0个或多个值的有序列表,每个值可以是任何类型。数组使用方括号符号,元素以逗号分隔。
      • 对象:名称/值对的无序集合,其中名称(也称为键)是字符串。由于对象旨在表示关联数组,推荐每个键在对象内是唯一的。对象用大括号分隔,并使用逗号分隔每对,而在每一对中,用冒号(:)将键或名称与其值分隔开
      • null:一个空值,使用单词null

    ES基础

    • ES输入文档和复杂的查询语法及输出的查询结果封装为XContent,数据就可以采用XML和JSON格式表示成可读的形式

    • 使用RESTFul API隐藏Lucene的复杂性

    • Lucene是由一个Java语言开发的开源全文检索引擎工具包。把Lucene用Netty封装成服务,使用JSON访问就是Elasticsearch底层是Luecen

    • 内置了对分布式集群和分布式索引的管理,所以相对Solr来说,不需要额外安装ZooKeeper,其更容易分布式部署

    • 搜索系统整体架构

      image-20200727183334227

    ES结构主要特征

    • 每一个运行的实例称之为一个节点,可以在同一台计算机上运行多个实例,也可以在每台计算机上只运行一个实例
    • 多个运行的实例可以组成一个集群,集群中存在一个动态选举出的一个主节点(master,主节点宕机,会自动选出新的主节点,所以不存在单点故障
    • 为了实现容错,Elasticsearch把查询文档集合分解为多个小的索引,每一个小的索引称之为==分片(shard,每一个分片都可以有0到多个副本(replicas),每一个副本==都是分片的完整复制品,这样提高了查询速度
    • 通过**Gateway来管理集群恢复,可以配置集群加入多个节点才能启动恢复数据。网关配置用于恢复任何失败的索引,当节点崩溃重新启动时,Elasticsearch将网关读取所有的索引和元数据**
    • Transport:内部节点或者集群客户端之间的交互方式,默认使用TCP协议进行交互,同时支持HTTP协议(JSON格式)Thrift,Servlet,Memcached,ZeroMQ等多种传输协议
    • 支持多种扩展插件

    数据架构的主要概念

    1. 索引(Index)

      • 逻辑数据的存储单元,相当于RDBMS数据库
      • 结构为快速有效的全文索引准备,不存储原始值
      • ES把索引放在一台或多台服务器上
    • 每个索引有一个多个分片(Shards,每个分片可以有多个副本(replica)
    1. 文档(document)

      • 存储在ES中的主要实体,相当于RDBMS中的一行记录
      • 在文档中,相同字段必须有相同类型
      • 多值字段(multivalued):文档由多个字段组成,每个字段多次出现在一个文档里
    2. 文档类型

      • 一个索引对象可以存储很多不同用途的对象

      • 相当于Mysql中的表
    3. 映射

      • ES在映射中存储有关字段的信息,每一个文档类型都有自己的映射

    Elasticsearch主要概念

    1. 节点和集群

    2. 分片

      • 作用:解决遇到大量文档时,内存限制、硬盘能力、处理能力不足、无法快速响应,可以把数据拆分成shard,存放在不同节点上,其中每个分片都是一个独立的索引
      • 查询的索引分布在多个**分片**上,ES会把查询发送给每个相关的分片,并将结果合并在一起
      • 应用程序并不知道分片的存在,多个分片可以加快索引
    3. 副本(replica)

      • 作用为了提高查询吞吐量和实现可用性
      • replica是一个分片的精确复制,每个分片有零个或多个副本
      • 主分片(primary):被动选择更改索引操作,其余成为副本分片(replica shard)
      • 主分片丢失,该分片数据在集群不可用,集群将提升副本为新的主分片
    4. Query DSL

      • 查询语言
    5. 时光之门

    索引建立和搜索

    *

    • Elasticsearch使用文档的唯一标识符来计算文档应该被放到哪个分片中

    • 执行搜索请求

      image-20200728113204001

    ES与关系型数据库(RDBMS)对比

    ElasticsearchRDBMS
    ClusterDatabase
    ShardShard
    Indextable
    FieldColumn
    DocumnetRow

    image-20200730111038866

    分词器

    • 从一串文本切分出一个一个的词条,对词条进行标准化

    • 包括三部分

      • character filter: 分词前的预处理,过滤HTML标签,特俗符号转换
      • tokenzier:分词
      • token filter:标准化
    • 内置分词器

      image-20200730125636189

    HTTP协议

    • 客户端发起一个到服务器指定端口的http请求,服务器端按指定格式返回网页或者其他网络资源

    image-20200727185414248

    • URL

      image-20200727185925968

  • 相关阅读:
    11.16~11.19绘制图表,导入EXCEL中数据,进行拟合
    【牛客刷题】——Python入门 07 循环语句(中)
    R 语言 |普通矩阵怎么保存为稀疏矩阵的3列(i, j, x)格式?
    HTML5基础
    K8S篇之实现利用Prometheus监控pod的实时数据指标
    Java反序列化:CC1链 详解
    什么是容器?容器有什么作用?
    JAVA的jdk1.8中文文档
    Java调用ApacheOpenOffice将Word转PDF
    HP惠普暗影精灵9P OMEN 17.3英寸游戏本17-cm2000(70W98AV)原装出厂Windows11-22H2系统镜像
  • 原文地址:https://blog.csdn.net/why123wh/article/details/127434213