本文主要介绍什么是 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核心技术与实战

https://www.elastic.co/cn/what-is/elasticsearch

全文搜索引擎 Elasticsearch 入门:集群搭建的更多相关文章

  1. ElasticSearch入门 —— 集群搭建

    一.环境介绍与安装准备 1.环境说明 2台虚拟机,OS为ubuntu13.04,ip分别为xxx.xxx.xxx.140和xxx.xxx.xxx.145. 2.安装准备 ElasticSearch(简 ...

  2. 全文搜索引擎Elasticsearch入门实践

    全文搜索引擎Elasticsearch入门实践 感谢阮一峰的网络日志全文搜索引擎 Elasticsearch 入门教程 安装 首先需要依赖Java环境.Elasticsearch官网https://w ...

  3. 全文搜索引擎 Elasticsearch 入门

    1. 百科 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作 ...

  4. 全文搜索引擎 Elasticsearch 入门教程

    全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选. 它可以快速地储存.搜索和分析海量数据.维基百科.Stack Overflow.Gi ...

  5. elasticsearch 分布式集群搭建

    elasticsearch环境搭建及单节点搭建可参考我的上一篇:http://www.cnblogs.com/xuwenjin/p/8745624.html 本文以Elaticsearch 6.2.2 ...

  6. Elasticsearch冷热集群搭建

    ES版本:6.2.4 集群环境:7台机器,每台部署一个master节点.其中3台部署2个hot节点,另外4台部署2个warm节点.共21个节点. 1. 挂盘 按实际情况分盘,一个机子上的2个data节 ...

  7. HBase+Phoenix整合入门--集群搭建

    环境:CentOS 6.6 64位    hbase 1.1.15  phoenix-4.7.0-HBase-1.1 一.前置环境: 已经安装配置好Hadoop 2.6和jdk 1.7 二.安装hba ...

  8. 使用 docker 进行 ElasticSearch + Kibana 集群搭建

    在Docker容器中运行Elasticsearch Kibana和Cerebro 机器信息 10.160.13.139 10.160.9.162 10.160.11.171 1. 安装docker和d ...

  9. Elastic Stack之ElasticSearch分布式集群yum方式搭建

    Elastic Stack之ElasticSearch分布式集群yum方式搭建 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.搜索引擎及Lucene基本概念 1>.什么 ...

随机推荐

  1. 工作笔记-- 源码安装nginx

    源码安装nginx 1.安装nginx的依赖包 [root@localhost ~]# yum -y install gcc gcc-c++ openssl openssl-devel pcre pc ...

  2. linux ftp 服务器 ,web 服务器 配置

    ftp服务器配置: 1:vsftpd.conf 2;vsftpd.ftpusers 3:vsftpd.user_list web服务器配置: apache 配置

  3. COCOAPI for windows error!

    refer this https://github.com/philferriere/cocoapi However, you may encounter a bug where you cannot ...

  4. URL各部分详解

    就以下面这个URL为例,介绍下普通URL的各部分组成 http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&pa ...

  5. http1.0、http1.x、http 2和https梳理

    http1.0.http1.x.http 2和https梳理 Http1.x 线程阻塞,在同一时间,同一域名的请求有一定数量限制,超过限制数目的请求会被阻塞 http1.0 缺陷:浏览器与服务器只保持 ...

  6. ios---cocoapods 安装与使用 (AFNetworking为例)

    cocoapods 安装与使用 一.CocoaPods是什么? CocoaPods是一个用Ruby写的.负责管理iOS项目中第三方开源库的工具,CocoaPods能让我们集中的.统一管理第三方开源库, ...

  7. webpack4.0 ---引用vue文件

    一.引入Vue 1.安装依赖环境 npm i vue-loader -D;//解析转化.vue文件,npm i vue-style-loader -D npm i vue-template-compi ...

  8. Git详解之初次运行

    配置文件 一般在新的系统上,我们都需要先配置下自己的 Git 工作环境.配置工作只需一次,以后升级时还会沿用现在的配置.当然,如果需要,你随时可以用相同的命令修改已有的配置. Git 提供了一个叫做 ...

  9. HTML5的基础学习

    课前预习:HTML又被叫做超文本标记语言,它不是编程语言,是web中最微不足道的,但又是web中最微不足道的基石, 对零基础学习HTML的人员来说先认识HTML的标签和字体是必不可少的,万丈高楼平地起 ...

  10. ARTS Week 9

    Dec 23, 2019 ~ Dec 29, 2019 Algorithm Problem 69 Sqrt(x) 实现求解平方根函数Sqrt(x) 题目链接 题目描述:给定一个非负数x,求解该数字的平 ...