### Elasticsearch简介
- Elasticsearch 是一个开源的实时的分布式搜索分析引擎,建立在一个全文搜索引擎库 [Apache Lucene™](https://lucene.apache.org/core/) 基础之上
- Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,对外提供一套简单一致的 RESTful API
- 更加准确的定义
1. 一个分布式的实时文档存储,每个字段 可以被索引与搜索
2. 一个分布式实时分析搜索引擎
3. 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
4. 由传统关系型数据存储模式(行和列)转变为以文档为单位的对象存储模式的转变
- 谁在用它 ?
1. Wikipedia 使用 Elasticsearch 提供带有高亮片段的全文搜索
2. GitHub 使用 Elasticsearch 对1300亿行代码进行查询
- 名词释义
1. 集群:表示多个Elasticsearch实例同时提供所搜服务
2. 索引:类似于传统关系型数据库中的一个`数据库实例schema`
3. 文档:类似于传统关系型数据库中的一个`表table`
4. 类型:类似于传统关系型数据库中的一行数据即一个实体中包行的数据
5. 属性:类似于传统关系型数据库中的一个列`字段filed`
- 内部存储关系
一个集群可以包含多个索引,一个索引可以包含多个类型,一个类型可以存储为多个文档,一个类型可以包含多个属性
- 索引和检索数据
1. 传输协议
- 基于Java体制内原生传输协议
- 节点客户端(Node client)
- 官方解释:`节点客户端作为一个非数据节点加入到本地集群中。换句话说,它本身不保存任何数据,但是它知道数据在集群中的哪个节点中,并且可以把请求转发到正确的节点` 说白了就是当前客户端作为一个节点会加入到Elasticsearch集群中,但是这个节点只是做转发并不会存储任何索引的文档数据
- 传输客户端(Transport client)
- 官方解释:`轻量级的传输客户端可以将请求发送到远程集群。它本身不加入集群,但是它可以将请求转发到集群中的一个节点上` 说白了就是一个纯数据操作的客户端,只是数据传输是采用Elasticsearch原生协议
- 基于跨语言的restful的http协议
- 由http请求方式method决定数据的操作
- PUT:索引或更新文档
- POST:索引文档
- GET:检索文档
- HEAD:检查文档是否存在
- DELETE:删除文档
2. 数据格式
- 基于Json格式进行文档数据存储
### Elasticsearch安装
`Elasticsearch是基于Java语言的应用程序,所以在安装前我们必须保证有Java的运行环境(即安装jdk)`
- 安装包下载
1. 获取Java的jdk安装包
- curl -L "https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz" -H "Cookie: oraclelicense=accept-securebackup-cookie" -H "Connection: keep-alive" -O
2. 获取Elasticsearch安装包
- wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.tar.gz
- 解压并配置Java运行环境(JAVA_HOME配置,网上有教程哦)
- 解压并运行Elasticsearch
1. 解压 `tar -xvf elasticsearch-6.6.1.tar.gz`
2. 进入执行文件目录下 `cd elasticsearch-6.6.1/bin`
3. 运行 `./elasticsearch`,加 `-d` 使用后台方式运行
- 验证安装
1. curl http://127.0.0.1:9200
2. 响应如图数据即安装成功
