[toc]
前言
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库--无论是开源还是私有。
但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。
Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。
然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎. 它可以被下面这样准确的形容:
- 一个分布式的实时文档存储,每个字段 可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据 Elasticsearch 将所有的功能打包成一个单独的服务,这样你可以通过程序与它提供的简单的 RESTful API 进行通信, 可以使用自己喜欢的编程语言充当 web 客户端,甚至可以使用命令行(去充当这个客户端)。
就 Elasticsearch 而言,起步很简单。对于初学者来说,它预设了一些适当的默认值,并隐藏了复杂的搜索理论知识。 它 开箱即用 。只需最少的理解,你很快就能具有生产力
概念
-
Near RealTime Elastic是一种实时搜索引擎
-
Cluster 集群是各个节点的集合,保存了所有的数据并提供了数据检索能力。
- 默认集群的名称是elasticsearch
- 集群名称不可重复
- 每个集群至少有一个节点
- Node 多个节点构成了集群,集群的数据存储和数据检索也是依赖于节点来完成的,节点的名称是一个随机值,当然你也可以自己修改咯
- 节点默认加入elasticsearch集群
- 一个集群的拥有的节点数量不做限制
- 如果网络上没有一个节点,那么此时新建一个节点将默认加入到elasticsearch集群中
- Index 索引是document的集合,通过索引你可以查询,更新,删除document
- 索引的名称必须全部是小写
- 集群中你可以定义多个index
-
Type Type可以理解为Java中的类,Document就是通过该类创建出来的实例
-
Document Document是可以被检索到的最小数据单元集合
- Document数据全部是JSON格式
- Document必须指定其对应type
-
Shards 数据分片,提供了index数据量无限增大的能力。出现数据分片的原因:单个node容不下某个index中所有的数据。
-
Replicas 既然有了数据分片,也就意味着数据不在同一个物理节点上存储,那么某次查询就会可能出现某个数据分片所在的节点挂掉的情况,此时的解决方案就是进行数据复制
- 默认情况下,elasicsearch有5个数据分片和1次复制,这就意味着如果集群中只有两个nodeA和B,加入nodeA保存着源数据,那么经过一个数据复制之后,nodeB中也会存在一份相同的数据