一、概述
1、简介
ElasticSearch是一个基于Lucene实现的开源、分布式、Restful的全文本搜索引擎;此外,它还是一个分布式实时文档存储,其中每个文档的每个field均是被索引的数据,且可被搜索;也是一个带实时分析功能的分布式搜索引擎,能够扩展至数以百计的节点实时处理PB级的数据。
应用场景:当我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快、能有一个零配置和一个完全免费的搜索模式、能够简单地使用JSON通过HTTP来索引数据、搜索服务器始终可用、一台开始并扩展到数百台,并且实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题以及可能出现的更多其它问题。
设计用途:用于分布式全文检索
技术支持:通过HTTP使用JSON进行数据索引
主要目的:解决对于搜索的众多需求
2、基本组件
索引(index):文档容器,换句话说,索引是具有类似属性的文档的集合。类似于表。索引名必须使用小写字母;
类型(type):类型是索引内部的逻辑分区,其意义完全取决于用户需求。一个索引内部可定义一个或多个类型。一般来说,类型就是拥有相同的域的文档的预定义。
文档(document):文档是Lucene索引和搜索的原子单位,它包含了一个或多个域。是域的容器;基于JSON格式表示。每个域的组成部分:一个名字,一个或多个值;拥有多个值的域,通常称为多值域;
映射(mapping):原始内容存储为文档之前需要事先进行分析,例如切词、过滤掉某些词等;映射用于定义此分析机制该如何实现;除此之外,ES还为映射提供了诸如将域中的内容排序等功能。
4、ES的集群组件
Cluster:ES的集群标识为集群名称;默认为"elasticsearch"。节点就是靠此名字来决定加入到哪个集群中。一个节点只能属性于一个集群。
Node:运行了单个ES实例的主机即为节点。用于存储数据、参与集群索引及搜索操作。节点的标识靠节点名。
Shard:将索引切割成为的物理存储组件;但每一个shard都是一个独立且完整的索引;创建索引时,ES默认将其分割为5个shard,用户也可以按需自定义,创建完成之后不可修改。
shard有两种类型:primary shard和replica。Replica用于数据冗余及查询时的负载均衡。每个主shard的副本数量可自定义,且可动态修改。
5、ES Cluster工作过程
启动时,通过多播(默认)或单播方式在9300/tcp查找同一集群中的其它节点,并与之建立通信。
集群中的所有节点会选举出一个主节点负责管理整个集群状态,以及在集群范围内决定各shards的分布方式。站在用户角度而言,每个均可接收并响应用户的各类请求。
集群有状态:green, red, yellow
6、其他
ES的默认端口:
参与集群的事务:9300/tcp
transport.tcp.port
接收请求:9200/tcp
http.port
二、安装配置ElasticSearch
1、系统环境
操作系统:一台CentOS release 6.9(主节点),两台CentOS release 6.7(其他节点)
ElasticSearch版本:elasticsearch-5.5.2.rpm
JDK版本:java-1.8.0-openjdk
注:由于ElasticSearch依赖Java环境,所以必须安装JDK。而且JDK版本必须在1.7以上。
2、安装并配置java环境
yum install java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64.rpm
vim /etc/profile.d/java.sh
添加:
export JAVA_HOME=/usr/bin/java
注:我的java在/usr/bin下,可以通过which命令查找下确切位置。
3、安装ElasticSearch
yum install elasticsearch-5.5.2.rpm
注:安装完成后有以下提示信息
简单编辑配置elasticsearch文件:
vim /etc/elasticsearch/elasticsearch.ym
主节点添加cluster以及node名称:
其他节点添加cluster以及node名称(cluster命名一样,node分别命名):
另一台:
启动elasticsearch服务:
service elasticsearch start
查看监听端口: