全文搜索引擎 Elasticsearch 入门:集群搭建
本文主要介绍什么是 ElasticSearch 以及为什么需要它,如何在本机安装部署 ElasticSearch 实例,同时会演示安装 ElasticSearch 插件,以及如何在本地部署多实例集群,方便在日后学习分布式相关原理。
什么是 ElasticSearch?
ElasticSearch 是一个基于 Lucene 的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。ElasticSearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,其中维基百科、Stack Overflow、Github 的搜索都是基于 ElasticSearch 构建的。
简而言之,ElasticSearch 是一个开源的近实时的分布式存储、搜索、分析引擎。
ElasticSearch 的主要功能简单来说就是两方面-搜索和聚合(比如最近7天口罩商品销量排名前10的商家列表),另外当海量数据不断增长的时候,还提供分布式存储以及集群管理能力。
因为 ElasticSearch 是起源于 Lucene 的,在这里简单地介绍下 Lucene:
Lucene 就是一个 jar 包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。我们就用 Java 开发的时候,引入 Lucene jar,然后基于 Lucene 的 API 进行去进行开发就可以了。使用 Lucene 就可以去将已有的数据建立索引,Lucene 会在本地磁盘上面,给我们组织索引的数据结构。另外的话,我们也可以用 Lucene 提供的一些功能和 API 来针对磁盘上的索引数据进行搜索。
同时 Lucene 也存在着很多局限性,比如只能基于 Java 语言开发,类库的接口学习曲线陡峭,原生并不支持水平扩展等。ElasticSearch 就解决了以上存在的问题,做到了支持分布式,可水平扩展,并且降低全文检索的学习曲线,可以被任何编程语言调用。
为什么需要 ElasticSearch?
用数据库,也可以实现搜索的功能,为什么还需要搜索引擎呢? 那我们来看一下如果用数据库做搜索会怎么样:
假如你在电商平台搜索物品,每个物品在数据库都有一条记录,每条记录的指定字段的文本,可能会很长,比如说商品描述字段的长度,有长达数千个,甚至数万个字符,这个时候,每次都要对每条记录的所有文本进行扫描,去判断包不包含我指定的这个关键词,比如我们搜索“口罩”,效率就会很慢。
并且还不能将搜索词拆分开来,尽可能去搜索更多的符合你的期望的结果,比如输入“医用罩”,就搜索不出来“医用口罩”。
但是基于 ElasticSearch 的 Github,比如我们搜索“设模式”,搜索结果也会出现“设计模式”:

因此,用数据库来实现搜索,是不太靠谱的,性能上也会比较差。
前面说了 ElasticSearch 是分布式搜索引擎,那么就让我们来看下 ElasticSearch 的分布式架构:
ElasticSearch 分布式架构

ElasticSearch 就是为高可用和可扩展而生的,从图中可以看出 ElasticSearch 很容易去做水平扩展,同时也是非常容易在个人电脑上做开发环境的搭建。当数据规模变大的情况下,集群规模可以从单个扩展至数百个节点,除此之外,ElasticSearch 还支持设置不同的节点类型,针对日志类的应用,可以用集群做一个 Hot & Warm 部署。
可以通过购置性能更强的服务器来完成,称为垂直扩展或者向上扩展,或增加更多的服务器来完成,称为水平扩展或者向外扩展。
ElasticSearch 是基于 Java 语言开发的,在之前安装是需要在本机安装 JDK 开发环境,但是在 ElasticSearch 7.0 版本后,内置了 Java 开发环境,使得安装会变得更加简单。
接下来让我们来动手安装 ElasticSearch。
ElasticSearch 安装与配置
官网下载地址: https://www.elastic.co/downloads/ElasticSearch

打开官网后根据自己的系统选择对应文件,因为我用的是 Windows 环境,所以下载 ElasticSearch-7.1.0-windows-x86_64.zip 版本,下载完成后解压即可。
在运行 ElasticSearch 之前,先让我们来窥探下 ElasticSearch 的文件目录结构:
文件目录结构

解压后的目录结构如上图所示,其中 bin 目录下主要是脚本文件;config 目录下主要是 ElasticSearch 配置文件,其中 ElasticSearch.yml 是主要需要配置的地方;JDK 目录是在 ElasticSearch 7.0 版本后出现的,为 Java 运行环境;data 目录其实包含了 ElasticSearch 的相关数据文件;lib 目录包含 Java 的类库;logs 目录下主要是 ElasticSearch 运行过程中所有的日志文件;modules 目录下包含所有的 ES 模块;ElasticSearch 是可以通过插件的方式去进行扩展,因此 plugins 目录下包含所有已安装的插件。
在 config 目录下有一个 jvm.options 文件,这是 JVM 的配置文件,7.1 版本中默认的 Xms 和 Xmx 都为 1GB。
建议把 Xms 和 Xmx 设置成一样的,也就是最大最小内存,Xmx 不要超过机器内存的 50%,内存的总量不要超过 30GB。
接下来让我们启动 ElasticSearch。
运行单个 ElasticSearch 实例
进入 bin 目录,打开 cmd 命令行,输入 elasticsearch -E node.name=node0 -E cluster.name=wupx -E path.data=node0_data,就可以运行一个 ElasticSearch 实例,ElasticSearch 本身特点之一就是开箱即用,如果是中小型应用,数据量少,操作不是很复杂,直接启动就可以用了。
可以在浏览器输入 http://localhost:9200,就可以看到 ElasticSearch 在本机启动起来了,网页显示内容如下:
{
"name" : "node0",
"cluster_name" : "wupx",
"cluster_uuid" : "1TT8NYjcSxmLKeG-1ukqfA",
"version" : {
"number" : "7.1.0",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "606a173",
"build_date" : "2019-05-16T00:43:15.323135Z",
"build_snapshot" : false,
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
其中 name 为 节点名称,cluster_name 为集群名称(默认的集群名称为 ElasticSearch),version.number: 7.1.0 为 ElasticSearch 版本号。
接下来让我们看下如何在本机安装 ElasticSearch 插件。
安装与查看插件
在 cmd 中输入 elasticsearch-plugin list 可以查看本机已安装的插件。
输入 elasticsearch-plugin install analysis-icu 下载国际化分词插件安装到本机。
安装成功后,启动 ElasticSearch,访问 http://localhost:9200/_cat/plugins ,我们可以看到这个插件成功安装在这个集群上面了。

如何在开发机上运行多个 ElasticSearch 实例呢?我们知道 ElasticSearch 其中一个特色是可以以分布式的方式去运行,也就是可以在多个机器上去运行多个不同实例来组成一个集群,为了能够理解内部工作机制,让我们一起来实践操作下。
运行多个 ElasticSearch 实例
在 cmd 中输入如下代码,每次启动指定节点名称,指定相同的集群名字,指定不同的存放数据地址,就可以运行四个 ElasticSearch 实例在后台。
elasticsearch -E node.name=node0 -E cluster.name=wupx -E path.data=node0_data -d
elasticsearch -E node.name=node1 -E cluster.name=wupx -E path.data=node1_data -d
elasticsearch -E node.name=node2 -E cluster.name=wupx -E path.data=node2_data -d
elasticsearch -E node.name=node3 -E cluster.name=wupx -E path.data=node3_data -d
在浏览器访问 http://localhost:9200/_cat/nodes ,可以查看集群存在哪里节点。

总结
这就是本文的主要内容,我相信大家对 ElasticSearch 有了初步的了解,都可以在本地运行一个 ElasticSearch 实例,也学会了在实例上安装你需要的插件,最后也实践了怎么在本机运行多个 ElasticSearch 实例的集群,这可以帮助我们以后更好地理解 ElasticSearch 分布式集群工作的方式。
参考文献
《深入理解ElasticSearch》
《Elasticsearch技术解析与实战》
Elasticsearch顶尖高手系列
Elasticsearch核心技术与实战
全文搜索引擎 Elasticsearch 入门:集群搭建的更多相关文章
- ElasticSearch入门 —— 集群搭建
一.环境介绍与安装准备 1.环境说明 2台虚拟机,OS为ubuntu13.04,ip分别为xxx.xxx.xxx.140和xxx.xxx.xxx.145. 2.安装准备 ElasticSearch(简 ...
- 全文搜索引擎Elasticsearch入门实践
全文搜索引擎Elasticsearch入门实践 感谢阮一峰的网络日志全文搜索引擎 Elasticsearch 入门教程 安装 首先需要依赖Java环境.Elasticsearch官网https://w ...
- 全文搜索引擎 Elasticsearch 入门
1. 百科 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作 ...
- 全文搜索引擎 Elasticsearch 入门教程
全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选. 它可以快速地储存.搜索和分析海量数据.维基百科.Stack Overflow.Gi ...
- elasticsearch 分布式集群搭建
elasticsearch环境搭建及单节点搭建可参考我的上一篇:http://www.cnblogs.com/xuwenjin/p/8745624.html 本文以Elaticsearch 6.2.2 ...
- Elasticsearch冷热集群搭建
ES版本:6.2.4 集群环境:7台机器,每台部署一个master节点.其中3台部署2个hot节点,另外4台部署2个warm节点.共21个节点. 1. 挂盘 按实际情况分盘,一个机子上的2个data节 ...
- HBase+Phoenix整合入门--集群搭建
环境:CentOS 6.6 64位 hbase 1.1.15 phoenix-4.7.0-HBase-1.1 一.前置环境: 已经安装配置好Hadoop 2.6和jdk 1.7 二.安装hba ...
- 使用 docker 进行 ElasticSearch + Kibana 集群搭建
在Docker容器中运行Elasticsearch Kibana和Cerebro 机器信息 10.160.13.139 10.160.9.162 10.160.11.171 1. 安装docker和d ...
- Elastic Stack之ElasticSearch分布式集群yum方式搭建
Elastic Stack之ElasticSearch分布式集群yum方式搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.搜索引擎及Lucene基本概念 1>.什么 ...
随机推荐
- 浏览器警告Failed to decode downloaded font和OTS parsing error: Failed to convert *** font to ***
昨晚,在做一个自己感兴趣的东西时,发现浏览器报警告,Failed to decode downloaded font以及OTS parsing error: Failed to convert *** ...
- 实验四:划分多个VLAN
1.配置图 2.配置命令 Switch1.Switch2.Switch3的配置是一样的,如下所示:(可直接复制交换机,可以只配置一次) 通过命令查看配置: Switch0的配置如下: 通过命令查看tr ...
- HttpApplication IHttpAsyncHandler, IHttpHandler, IComponent, IDisposable ps url System.Web.dll
// 摘要: // 定义 ASP.NET 应用程序中的所有应用程序对象共有的方法.属性和事件.此类是用户在 Global.asax 文件中所定义的应用程序的基类. [Toolb ...
- 分析一下 原型模式的 UML 类图 。 复制对象, 深浅拷贝 月经贴 ,请回避
- 快速构建第三方api应用
1.使用框架和扩展 详细请看composer.json "php": "^7.1.3", "laravel-admin-ext/config" ...
- CSS-09-背景属性
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ios--->instrument的leaks来检查内存泄漏
instrument来检查内存泄漏 1.第一步打开 或者: 然后选择leaks 2.若此时编译出现如下问题,可能是非debug版本造成的,切换成debug版本即可 打开工程的Edit Scheme选项 ...
- vscode写python时的代码错误提醒和自动格式化
python的代码错误检查通常用pep8.pylint和flake8,自动格式化代码通常用autopep8.yapf.black.这些工具均可以利用pip进行安装,这里介绍传统的利用pip.exe安装 ...
- 容器技术与docker
名词介绍 IaaS:基础设施即服务,要搭建上层数据应用,先得通过互联网获得基础性设施服务 PaaS:平台即服务,搭建平台,集成应用产品,整合起来提供服务 SaaS:软件即服务,通过网络提供程序应用类服 ...
- 关于mysql8启动后又停止(windows10系统),忘记密码以及密码过期等坑解决办法总结!
一 我遇到的问题 1 mysql连接不了,mysql服务启动后又马上关闭 2 忘记密码或者重装服务后提示安装的随机密码过期 一个一个来,先看第一个: 1 出现这个情况很大原因是mysql安装目录有多余 ...