1. 简介
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式的多用户能力的全文搜索引擎,基于RESTful web接口。
ES是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。
它提供:
- 分布式的实时文件存储,每个字段都被检索并可被搜索;
- 实时分析的分布式搜索引擎;
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
2. 适用场景
- 可以用于搜索各种文档
- 适合作为NoSQL的数据存储,但不支持分布式事务
3. 实现过程
- 首先用户将数据提交到ES数据库中;
- 再通过分词控制器去将对应的语句分词;
- 然后将其权重和分词结果一并存入数据;
- 当用户搜索数据时,再根据权重将结果排名、打分;
- 最后将返回结果呈现给用户。
4. 核心概念
- 接近实时(NRT)
ElasticSearch是一个接近实时的搜索平台,从索引一个文档直到这个文档能够被搜索到只有轻微的一秒延迟; - 索引(index)
一个索引就是一个拥有相似特征的文档的集合。类似于关系型数据库中Database的概念; - 类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型就是你的索引的一个逻辑上的分类/分区,通过我们会为一组公共字段的文档定义一类型。类型(type)类似于关系型数据库中Table的概念; - 文档(document)
一个文档是一个可被索引的基础信息单元。文档以JSON的格式来表示;
在一个index/type里面,我们可以存储任意多的文档;
文档(document)类似于关系型数据库中一行记录(Record)的概念;
一个文档除了用户定义的数据外,还包括:_index、_type和_id字段。 - 分片和复制(shards & replicas)
ES提供将索引(index)划分成多份的能力,这些份就叫做分片。当创建一个索引的时候,可以指定你想要的分片的数量,每个分片本身也是一个功能完善并且独立的"索引",这个"索引"可以被放置到集群中的任何节点上;
在网络环境中,失败随时有可能发生,在某个分片/节点因为某些原因处于离线状态或者消失时,这种情况下,有一个故障转移机制是非常有用并且强力推荐的,为此目的,ES允许你创建分片的一份或者多份拷贝,这些拷贝叫做复制,复制的重要性:
1. 在分片/节点失败的情况下,提供了高可用性;
2. 扩展搜索量/吞吐量,因为搜索可以在所有的复制上并行运行。
综上:
每个索引可以被分成多个分片,一个索引也可以被复制0次或多次。
一旦复制了索引,每个索引就有了主分片和复制分片之别。
分片和复制的数量可以在创建索引的时候指定,在索引创建之后,可以在任何时候动态改变复制的数量,但是不能改变分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个复制分片(1个完全拷贝),这样的话每个索引总共就有10个分片。一个索引的多个分片可以存放在集群中的一台主机上,也可以存放在多台主机上,这取决于你的集群机器数量。主分片和复制分片的具体位置是由ES内在的策略所决定的。
以上原文链接:https://www.cnblogs.com/sunsky303/p/9438737.html