ElasticSearch
ElasticSearch
RESTful
全文检索
Lucene
Lucene 是一个开源、免费、高性能、纯 Java 编写的全文检索引擎,可以算作是开源领域最好的全文检索工具包。
在实际开发中,Lucene 几乎适用于任何需要全文检索的场景,所以 Lucene 先后发展出好多语言版本,例如 C++、C#、Python 等。
早在 2005 年,Lucene 就升级为 Apache 顶级开源项目。它的作者是 Doug Cutting,有的人可能没听过这这个人,不过你肯定听过他的另一个大名鼎鼎的作品 Hadoop。
不过需要注意的是,Lucene 只是一个工具包,并非一个完整的搜索引擎,开发者可以基于 Lucene 来开发完整的搜索引擎。比较著名的有 Solr、ElasticSearch,不过在分布式和大数据环境下,ElasticSearch 更胜一筹。
Lucene 主要有如下特点:
- 简单
- 跨语言
- 强大的搜索引擎
- 索引速度快
- 索引文件兼容不同平台
ElasticSearch
ElasticSearch 是一个分布式、可扩展、近实时性的高性能搜索与数据分析引擎。ElasticSearch 基于 Java 编写,通过进一步封装 Lucene,将搜索的复杂性屏蔽起来,开发者只需要一套简单的 RESTful API 就可以操作全文检索。
ElasticSearch 在分布式环境下表现优异,这也是它比较受欢迎的原因之一。它支持 PB 级别的结构化或非结构化海量数据处理
整体上来说,ElasticSearch 有三大功能:
- 数据搜集
- 数据分析
- 数据存储
ElasticSearch 的主要特点:
- 分布式文件存储。
- 实时分析的分布式搜索引擎。
- 高可拓展性。
- 可插拔的插件支持。
ElasticSearch安装
安装ES服务
- /etc/security/limits.conf
* soft nproc 4096
* hard nproc 4096
* soft nofile 65536
* hard nofile 65536
- /etc/sysctl.conf
vm.max_map_count=655360
单节点安装
首先打开 Es 官网,找到 Elasticsearch:
然后点击下载按钮,选择合适的版本直接下载即可。
将下载的文件解压,解压后的目录含义如下:
目录 | 含义 |
---|---|
modules | 依赖模块目录 |
lib | 第三方依赖库 |
logs | 输出日志目录 |
plugins | 插件目录 |
bin | 可执行文件目录 |
config | 配置文件目录 |
data | 数据存储目录 |
启动方式:
进入到 bin 目录下,直接执行 ./elasticsearch 启动即可。
看到 started 表示启动成功。
默认监听的端口是 9200,所以浏览器直接输入 localhost:9200 可以查看节点信息。
节点的名字以及集群(默认是 elasticsearch)的名字,我们都可以自定义配置。
打开 config/elasticsearch.yml 文件,可以配置集群名称以及节点名称。配置方式如下:
cluster.name: javaboy-es
node.name: master
配置完成后,保存配置文件,并重启 es。重启成功后,刷新浏览器 localhost:9200 页面,就可以看到最新信息。
Es 支持矩阵:
HEAD 插件安装
Elasticsearch-head 插件,可以通过可视化的方式查看集群信息。
浏览器插件安装
Chrome 直接在 App Store 搜索 Elasticsearch-head,点击安装即可。
下载插件安装
四个步骤:
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
启动成功,页面如下:
注意,此时看不到集群数据。原因在于这里通过跨域的方式请求集群数据的,默认情况下,集群不支持跨域,所以这里就看不到集群数据。
解决办法如下,修改 es 的 config/elasticsearch.yml 配置文件,添加如下内容,使之支持跨域:
http.cors.enabled: true
http.cors.allow-origin: "*"
配置完成后,重启 es,此时 head 上就有数据了。
分布式安装
- 一主二从
- master 的端口是 9200,slave 端口分别是 9201 和 9202
首先修改 master 的 config/elasticsearch.yml 配置文件:
cluster.name: javaboy-es #(自定义的集群名称)
node.name: master #(自定义的节点名称)
node.master: true #(作为master节点)
network.host: 127.0.0.1 #(主机IP地址)
配置完成后,重启 master。
将 es 的压缩包解压两份,分别命名为 slave01 和 slave02,代表两个从机。
分别对其进行配置。
slave01/config/elasticsearch.yml:
cluster.name: javaboy-es #(自定义的集群名称,同master节点的配置一致)
node.name: slave01 #(自定义的节点名称)
network.host: 127.0.0.1 #(主机IP地址)
http.port: 9201 #(端口号)
discovery.zen.ping.unicast.hosts: ["127.0.0.1"] #(找到master节点)
slave02/config/elasticsearch.yml:
cluster.name: javaboy-es #(自定义的集群名称,同master节点的配置一致)
node.name: slave02 #(自定义的节点名称)
network.host: 127.0.0.1 #(主机IP地址)
http.port: 9202 #(端口号)
discovery.zen.ping.unicast.hosts: ["127.0.0.1"] #(找到master节点)
然后分别启动 slave01 和 slave02。启动后,可以在 head 插件上查看集群信息。
Kibana 安装
Kibana 是一个 Elastic 公司推出的一个针对 es 的分析以及数据可视化平台,可以搜索、查看存放在 es 中的数据。
安装步骤如下:
- 下载 Kibana:https://www.elastic.co/cn/downloads/kibana
- 解压
- 配置 es 的地址信息(可选,如果 es 是默认地址以及端口,可以不用配置,具体的配置文件是 config/kibana.yml)
- 执行 ./bin/kibana 文件启动
- localhost:5601
Kibana 安装好之后,首次打开时,可以选择初始化 es 提供的测试数据,也可以不使用。
Kibana的基本操作
curl
ElasticSearch核心概念介绍
ElasticSearch核心概念
集群(Cluster)
es6.8
es7.10
- es01
cluster.name: el-cluster
node.name: es01
#path.data: /home/es/es01/data
#path.logs: /home/es/es01/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.220.**0","192.168.220.**1","192.168.220.**2"]
cluster.initial_master_nodes: ["192.168.220.**0]
http.cors.enabled: true
http.cors.allow-origin: "*"
- es02
cluster.name: el-cluster
node.name: es02
#path.data: /home/es/es02/data
#path.logs: /home/es/es02/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.220.**0","192.168.220.**1","192.168.220.**2"]
cluster.initial_master_nodes: ["192.168.220.**0]
http.cors.enabled: true
http.cors.allow-origin: "*"
- es03
cluster.name: el-cluster
node.name: es03
#path.data: /home/es/es03/data
#path.logs: /home/es/es03/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.seed_hosts: ["192.168.220.**0","192.168.220.**1","192.168.220.**2"]
cluster.initial_master_nodes: ["192.168.220.**0]
http.cors.enabled: true
http.cors.allow-origin: "*"
一个或者多个安装了 es 节点的服务器组织在一起,就是集群,这些节点共同持有数据,共同提供搜索服务。
一个集群有一个名字,这个名字是集群的唯一标识,该名字成为 cluster name,默认的集群名称是 elasticsearch,具有相同名称的节点才会组成一个集群。
可以在 config/elasticsearch.yml 文件中配置集群名称:
cluster.name: javaboy-es
在集群中,节点的状态有三种:绿色、黄色、红色:
- 绿色:节点运行状态为健康状态。所有的主分片、副本分片都可以正常工作。
- 黄色:表示节点的运行状态为警告状态,所有的主分片目前都可以直接运行,但是至少有一个副本分片是不能正常工作的。
- 红色:表示集群无法正常工作。
节点(Node)
集群中的一个服务器就是一个节点,节点中会存储数据,同时参与集群的索引以及搜索功能。一个节点想要加入一个集群,只需要配置一下集群名称即可。默认情况下,如果我们启动了多个节点,多个节点还能够互相发现彼此,那么它们会自动组成一个集群,这是 es 默认提供的,但是这种方式并不可靠,有可能会发生脑裂现象。所以在实际使用中,建议一定手动配置一下集群信息。
索引(Index)
索引可以从两方面来理解:
名词
具有相似特征文档的集合。
动词
索引数据以及对数据进行索引操作。
类型(Type)
类型是索引上的逻辑分类或者分区。在 es6 之前,一个索引中可以有多个类型,从 es7 开始,一个索引中,只能有一个类型。在 es6.x