本文主要介绍什么是 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. es7中数组如何判断元素是否存在

    const arr = [1,2,3,4,5,6] console.log(arr.includes(4)) //true

  2. 第二阶段冲刺个人任务——seven

    今日任务: 整体运行测试上传到公网上的程序. 昨日成果: 搭建网络服务器,上传数据库及程序.

  3. 总是在起头可是能怎么办呢 Python数据分析

    目录 前言1 第1章准备工作5 本书主要内容5 为什么要使用Python进行数据分析6 重要的Python库7 安装和设置10 社区和研讨会16 使用本书16 致谢18 第2章引言20 来自bit.l ...

  4. 使用Azure CLI创建Linux虚拟机

    Azure提供了三种方式创建虚拟机,分别是Azure CLI.Azure PowerShell和Azure门户.本文介绍使用Azure CLI来创建Linux虚拟机. 使用Azure CLI创建Lin ...

  5. Hbase与Maven工程的Spring配置笔记

    1.HBase基本操作 hbase shell: 连接到正在运行的HBase实例 help: 显示一些基本的使用信息以及命令示例. 需要注意的是: 表名, 行, 列都必须使用引号括起来 create ...

  6. Java多线程,对锁机制的进一步分析

    1 可重入锁 可重入锁,也叫递归锁.它有两层含义,第一,当一个线程在外层函数得到可重入锁后,能直接递归地调用该函数,第二,同一线程在外层函数获得可重入锁后,内层函数可以直接获取该锁对应其它代码的控制权 ...

  7. CUDA 计算pi (π)

    通过简单的程序设计熟练CUDA的使用步骤 下面是cuda代码及相关注释 #include <stdio.h> #include <iostream> #include < ...

  8. Unicode标准以及其常见的编码方案

    目录 基本概念 码位 码位的类型 编码方案 UTF-32 UTF-16 UTF-8 参考资料 Unicode标准为每一个字符提供一个唯一的数字,而不用区分平台.语言等因素. The Unicode S ...

  9. 小程序redio 样式

    小程序 radio 不写样式大概是这样的 数据为测试数据. 为了增加用户体验我们一下 美化后大概是这样的 给他设定头部.左边间距 ,和自身最小宽度 上代码: wxml: <radio-group ...

  10. ThreadLocalRandom ---- 提升Random在大并发下的效率

    本博客系列是学习并发编程过程中的记录总结.由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅. 并发编程系列博客传送门 随机数 随机数在科学研究与工程实际中有着极其重要的应用! ...