ES-基础知识总结

学习目标

熟悉ES中index,shard,type,document,倒排索引等概念以及Client API。

作用

  • 高度可扩展的开源全文搜索与分析引擎
  • 快速地、近实时的对大数据进行存储、搜索与分析
  • 用来支撑有负责的数据搜索需求的企业级应用
  • 一个分布式可扩展的实时搜索和分析引擎
  • 一切的设计都是为了提高搜索的性能(为了提高搜索能力,在插入或者更新方面可能比较慢)

特点

  • 分布式
  • 高可用
  • 多类型
  • 多API
  • 面向文档
  • 异步写入
  • 近实时
  • 基于Lucene
  • Apache协议

核心概念

  • 近实时
  • 集群

    • 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。
      es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,
      你与任何一个节点的通信和与整个es集群通信是等价的。
  • 节点

    • 代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,
      同时也支持点对点的交互。
  • 索引
  • 类型
  • 文档
    • 一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖
      更多种形式,比如Word,PDF,html,XML等不同格式的文件都可以称之为文档。再比如一封邮件,一条短信,一条微博也可以称
      之为文档。很多情况下会使用文档来表征文本信息。(在Elasticsearch中,文档这个单词有特殊的含义。它指的是在Elasticsearch
      中被存储到唯一ID下的由最高级或者根对象 (root object )序列化而来的JSON。),在ES中一条数据Json数据就是一个文档:
{
    "name" :     "John",
    "sex" :      "Male",
    "age" :      25,
    "birthDate": "1990/05/01",
    "about" :    "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}

可以表示为User类型
  • 分片
    • 代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。
      构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
  • 副本
    • 代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中
      恢复。
    • 二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

传统数据库与ES之间的映射关系

关系型数据库 ES
DataBase index
Table type
Row Document
Column Field
Schema Mapping
Index Everything is indexed
SQL Query DSL
SELECT * FROM table GET http://
UPDATE table SET PUT http://

REST请求头

HTTP方法 数据处理 说明
POST Create 新增一个没有ID的资源
GET Read 取得一个资源
PUT Update 更新一个资源,或者新增一个含ID的资源(如果ID不存在)
DELETE Delete 删除一个资源

版本控制

ES提供了两种最为重要的版本控制类型:

  • 内部版本是以1开头的默认版本,每次对内容的更新都会增加,包括删除
  • 外部版本需要进行配置,version_type设置为external

端口

  • 9300 专门供Java使用的端口
  • 9200 供其他编程语言调用的端口

批量提交的原理:聚集一定数量的doc,然后发送一次添加请求!

Elasticsearch对复杂分布式机制的透明隐藏特性

  • Elasticsearch是一套分布式的系统,分布式是为了应对大数据量
  • 隐藏了复杂的分布式机制
  • cluster discovery(集群发现机制)—–比如当前我们启动了一个es进程,当启动了第二个es进程时,这个进程作为一个node自动就
    发现了集群,并且加入了进去,还接受了部分数据(作为replica shard)
    分片机制—-es自动地将我们创建的document插入的集群中,我们是不用关心数据是按照什么机制分片的、最后放入到那个shard中
  • shard负载均衡—–比如现在又10shard,集群中有3个节点,es会进行均衡的进行分配,以保持每个节点均衡的读写负载请求

ElasticSearch修改文档原理

  • 从旧的文档中检索JSON
  • 修改它
  • 删除修的文档(不会立即删除,但是也不能被检索到)
  • 索引一个新的文档

高可用方案(保证数据一致性)

  • 悲观并发控制(在读取特定行数据时,先对这行数据进行锁定,确保只有一个线程可以对这行数据进行操作)
  • 乐观并发控制:ElasticSearch所采用的方案。假设这种情况并不会经常发生,也不会去阻止某一数据的访问。然而,如果基础数据在我们
    读取和写入的间隔中发生了变化,更新就会失败。这时候就由程序来决定如何处理这个冲突。例如,它可以重新读取新数据来进行更新,
    又或者它可以将这一情况直接反馈给用户。

查询结果参数说明

  • hits:指明了匹配查询的文档总数
  • _score:每一个元素还拥有一个_score字段。这个是相关性评分,这个数值表示当前文档与查询的匹配程度。通常来说,搜索结果会先返回最匹配
    的文档,也就是说它们会按照_score由高至低进行排列。在这个例子中,我们并没有声明任何查询,因此_score就都会返回1
  • took:我们执行这次搜索请求所耗费的时间有多少毫秒。
  • shards:告诉我们参与查询分片的总数
  • timed_out:数值告诉了我们查询是否超时,会尽可能地返回你指定时间内它所查到的内容(这里应该强调一下timeout并不会终止查询,
    它只是会在你指定的时间内返回当时已经查询到的数据,然后关闭连接。在后台,其他的查询可能会依旧继续,尽管查询结果已经被返回了。)

查询URL说明

URL 说明
/_search 搜索所有的索引和文档
/index/_search 搜索索引index中的所有类型
/index1,index2/_search 搜索索引index1和index2中的所有文档和类型
/index1*,index2*/_search 搜索所有以index1和index2开头的所有文档和类型
/index/type/_search 搜索索引index中类型为type中的所有文档
/index1,index2/type1,type2/_search 搜索索引index1和索引index2中的类型为type1或者为type2中的所有文档
/_all/type1,type2/_search 搜索所有类型为type1以及type2中的文档

分片(Shard)和副本(Replica)

  • ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完
    成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。
  • 每个分片其内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。
  • Shard有两种类型:primary和replica,即主shard及副本shard。
  • Primary shard用于文档存储,每个新的索引会自动创建5个Primary shard,当然此数量可在索引创建之前通过配置自行定义,不过,一旦创建完成,其Primary shard的数量将不可更改。
  • Replica shard是Primary Shard的副本,用于冗余数据及提高搜索性能。
    每个Primary shard默认配置了一个Replica shard,但也可以配置多个,且其数量可动态更改。ES会根据需要自动增加或减少这些Replica shard的数量。
  • ES集群可由多个节点组成,各Shard分布式地存储于这些节点上。ES可自动在节点间按需要移动shard,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能。

基本概念

  1. 索引
    • ES将它的数据存储在一个或者多个索引中,可以向索引中写入数据,也可以从索引中读取数据,类似SQL中的数据库
  2. 文档
    • 文档是ES中的主要实体,对所有使用ES搜索的案例来说,最后都将转化为文档的搜索

你可能感兴趣的:(ES-基础知识总结)