ElasticSearch 是基于 Lucene 实现的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内存储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。
1 Lucene
Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供。
Lucene 官网 https://lucene.apache.org/
2 倒排索引
倒排索引源于实际应用根据属性值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是有属性来确定记录位置,因而成为倒排索引(inverted index)
3 索引词 (term)
在ElasticSearch中索引词(term) 是一个能够被索引的精确值。索引词是可以通过term 查询进行准确的搜索
4 文本 (text)
文本是一段普通的非结构化的文字。通常,文本会被分析成一个个的索引词(term),存储在Elasticsearch的索引库中。
为了让文本能够进行搜索,文本字段需要事先进行分析;当对文本中的关键词进行查询的时候,搜索引擎应该根据搜索条件搜索出原文本。
5 分析(analysis)
分析是将文本转换成索引词的过程,分析的结果依赖于分词器
比如:FOO BAR、Foo-Bar和foo bar这几个单词有可能会被分析成相同的索引词foo和bar,这些索引词存储在Elasticsearch的索引库中。当用FoO:bAR进行全文搜索的时候,搜索引擎根据匹配计算也能在索引库中搜索出之前的内容。这就是Elasticsearch的搜索分析。
6 集群(cluster)
集群由一个或多个节点组成,对外提供服务,对位提供索引和搜索功能
- 不同集群通过不同的名字来区分,默认名字elasticsearch
- 通过修改文件修改,或者在命令行中 -E cluster.name= XXXX 进行设定
7 节点(node)
一个节点是一个逻辑上独立的服务,他是集群的一部分,可以存储数据,并参与集群的索引和搜索功能。
**Master node: **主节点,只有主节点才能修改集群的状态信息。集群状态包括(所有节点信息;所有的索引和相关的Mapping与Setting信息;分片路由信息)
**Master-eligible node: **Master-eligible 可以参加选主流程吗,成为主节点
Data Node: 保存数据的节点,负责保存分片数据。在数据扩展上起到了至关重要的作用
**Coordinating Node: **负责接受Client 的请求,将请求发布到合适的节点,最终把结果汇集到一起,是每个节点默认都起到Coordinating Node 的职责
Machine Learning Node 负责跑机器学习的任务,用来做异常检测,发出告警
8 分片 (shard)
分片是单个Lucene实例,这是Elasticsearch管理的比较底层的功能。索引是指向主分片和副本分片的逻辑空间
主分片:每个文档都存储在一个分片中,当你存储一个文档的时候,系统会首先存储在主分片中,然后会复制到不同的副本中
副本分片:每一个分片有零个或多个副本。主要作用:增加高可用性(当主分片失败的时候,可以从副本分片中选择一个主分片),提高性能(当查询的时候可以到主分片或者副本分片中进行查询)
为什么分片,分片原因:
- 允许水平分割扩展数据
- 允许分配和并行操作从而提高性能和吞吐量
9 路由(routing)
当存储一个文档的时候,他会存储在唯一的主分片中,具体那个分片是通过散列值选择。
默认情况下,这个值是由文档的ID生成。如果文档有一个指定的父文档,则从父文档ID中生成,该值可以在存储文档的时候进行修改。
10 复制 (replica)
解决整个集群的单点问题。当网络中某个节点出现问题的时候,复制可以对故障进行转移,保证系统的高可用性
- 一个复制分片不会存储在同一个节点上
11 索引 (index)
索引是相同结果的文档集合。
12 类型(type)
在索引中,可以定义一个或者多个类型,类型是索引的逻辑分区
13 文档(document)
文档是存储在Elasticsearch 中的一个JSON 格式的字符串。他就像在关系数据库中表的一行。
每个存储在索引中的一个文档都有一个类型和一个ID,每个文档都是一个JSON对象,存储了零个或者多个字段,或者键值对。
原始的JSON 文档被存储在 _source的字段中。当搜索文档时候默认返回的就是这个字段。
14 字段(field)
文档中包含零个或者多个字段,字段可以是一个简单的值(例如字符串、整数、日期),也可以是一个数组或对象的嵌套结构。
字段类似于关系数据库中表的列。
每个字段都对应一个字段类型,例如整数,字符串,对象等。字段还可以指定如何分析该字段的值。
15 映射(mapping)
映射想关系数据库中的表结构,每一个索引都有一个映射,它定义了索引中的每一个字段类型,以及一个索引范围的设置。一个映射可以实现被定义,或者在第一次存储文档的时候自动识别。
16 主键(ID)
ID是一个文件的唯一标识,如果在存库的时候没有提供ID,系统会自动生成一个ID,文档的index/type/id必须是唯一的。