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)对比

Elasticsearch RDBMS
Cluster Database
Shard Shard
Index table
Field Column
Documnet Row

image-20200730111038866

分词器

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

  • 包括三部分

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

    image-20200730125636189

HTTP协议

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

image-20200727185414248

  • URL

    image-20200727185925968

猜你喜欢

转载自blog.csdn.net/why123wh/article/details/127434213