全文搜索引擎 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>.什么 ...
随机推荐
- [bzoj4942] [洛谷P3822] [NOI2017] 整数
题目链接 https://www.luogu.org/problemnew/show/P3822 想法 这个啊,就是线段树哇 最初的想法是每位一个节点,然后进位.退位找这一位前面第一个0或第一个1,然 ...
- c#数字图像处理(十三)图像开运算与闭运算
图像开运算与闭运算定义 二值图像开运算的数学表达式为: g(x, y)=open[f(x, y ), B]=dilate{erode[f(x, y),B],B} 二值图像的开运算事实上就是先作腐蚀运算 ...
- Hbase与Maven工程的Spring配置笔记
1.HBase基本操作 hbase shell: 连接到正在运行的HBase实例 help: 显示一些基本的使用信息以及命令示例. 需要注意的是: 表名, 行, 列都必须使用引号括起来 create ...
- 使用dlib自带的面向梯度直方图(HOG)和线性分类器方法来检测人脸
之前使用opencv里面CascadeClassifier(级联分类器)来识别人脸, 下面使用dlib库来实现人脸识别. dlib是一个开源的库,它包含了很多内容有机器学习,图像处理,数值算法等等. ...
- Django 2.2
Django 2.2 LTS 发布,长期支持版来了 django中文网:https://www.django.cn/course/course-3.html Django 2.2 已正式发布,这是一个 ...
- 线程池之 ThreadPoolExecutor
线程池之 ThreadPoolExecutor + 面试题 线程池介绍 线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销. ...
- 十五 awk文本处理
Awk 语法和基础命令 以行为处理单位 对数据进行逐行处理 处理完当前行,把当前行的处理结果输出后自动对下一行进行处理 直到文件中所有行处理完为止 创造者:Aho.Weinberger.Kernigh ...
- 快速理解YOLO目标检测
YOLO(You Only Look Once)论文 近些年,R-CNN等基于深度学习目标检测方法,大大提高了检测精度和检测速度. 例如在Pascal VOC数据集上Faster R-CNN的mAP达 ...
- POJ_1376_bfs
题目描述: 给定一个黑白格子的图,黑格子是障碍物,一个线段交点的起点,一个线段交点的终点和初始方向,机器人从起点开始,只能沿着线段,走到终点,期间不能沿着障碍物边缘和墙边缘. 一次操作可以向当前方向走 ...
- EOJ Monthly 2019.2 E 中位数 (二分+中位数+dag上dp)
题意: 一张由 n 个点,m 条边构成的有向无环图.每个点有点权 Ai.QQ 小方想知道所有起点为 1 ,终点为 n 的路径中最大的中位数是多少. 一条路径的中位数指的是:一条路径有 n 个点,将这 ...