从 0 到 1 学习 elasticsearch ,这一篇就够了!(建议收藏)

本文已收录github:https://github.com/BigDataScholar/TheKingOfBigData,里面有我准备的大数据高频考点,Java一线大厂面试题资源,上百本免费电子书籍,作者亲绘大数据生态圈思维导图…持续更新,欢迎star!

前言

        之前一直想花点时间写一篇 elasticsearch 的保姆级教程,于是,趁着年假的几天时间加上周末的一些时间,我产出了自认为算是非常详细的,基于目前最新版本的elasticsearch7.11教程。不管是新手上路,还是秋名山老司机,都建议收藏一下,希望看完对您有所帮助!如果可以,记得一键三连
在这里插入图片描述

ElasticSearch概述

        Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。

        据国际权威的数据库产品评测机构 DB Engines 的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用。

        为了增加学习的趣味性,我们来聊一聊 elasticsearch 的历史

历史

        多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。

        直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。

        后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。

        第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过 Elasticsearch 将永远开源且对所有人可用。

        Shay的妻子依旧等待着她的食谱搜索……

ES 和 solr 的差别

        学习 ES,我们免不了需要跟 solr 进行对比学习!下面我们分别来看看,它们之间具体的差别在哪里:

Elasticsearch 简介

        Elasticsearch 是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。

        它用于全文搜索、结构化搜索、分析以及将这三者混合使用

        维基百科使用Elasticsearch提供全文搜索并高亮关键字,以及输入 实时搜索(search-asyou-type)和 搜索纠错(did-you-mean)等搜索建议功能。

        英国卫报使用Elasticsearch结合用户日志和社交网络数据提供给他们的编辑以实时的反馈,以便及时了解公众对新发表的文章的回应。

        StackOverflow结合全文搜索与地理位置查询,以及more-like-this功能来找到相关的问题和答案。

        Github使用Elasticsearch检索1300亿行的代码。

        但是 Elasticsearch 不仅用于大型企业,它还让像DataDog 以及 Klout 这样的创业公司将最初的想法变成可扩展的解决方案。

        Elasticsearch可以在你的笔记本上运行,也可以在数以百计的服务器上处理PB级别的数据

        Elasticsearch 是一个基于 Apache Lucene™ 的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库

        但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的

        Elasticsearch也使用Java开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单

Solr 简介

        Solr 是 Apache 下的一个顶级开源项目,采用Java开发,它是基于 Lucene 的全文搜索服务器。Solr提供了比 Lucene 更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。

        Solr可以独立运行,运行在Jetty、Tomcat 等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据 xml 文档添加、删除、更新索引。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

        Solr是基于 lucene 开发企业级搜索服务器,实际上就是封装了lucene。

        Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。

Lucene简介

        Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。

        Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

        Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。

        Lucene是一个全文检索引擎的架构。那什么是全文搜索引擎?

        全文搜索引擎是名副其实的搜索引擎,国外具代表性的有Google、Fast/AllTheWeb、AltaVista、Inktomi、Teoma、WiseNut等,国内著名的有百度(Baidu)。它们都是通过从互联网上提取的各个网站的信息(以网页文字为主)而建立的数据库中,检索与用户查询条件匹配的相关记录,然后按一定的排列顺序将结果返回给用户,因此他们是真正的搜索引擎。

        从搜索结果来源的角度,全文搜索引擎又可细分为两种,一种是拥有自己的检索程序(Indexer),俗称“蜘蛛”(Spider)程序或“机器人”(Robot)程序,并自建网页数据库,搜索结果直接从自身的数据库中调用,如上面提到的7家引擎;另一种则是租用其他引擎的数据库,并按自定的格式排列搜索结果,如 Lycos 引擎。

Elasticsearch和Solr比较

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ElasticSearch vs Solr 总结

        1、es基本是开箱即用,非常简单。Solr安装略微复杂一丢丢!

        2、Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能

        3、Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式

        4、Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑

        5、Solr 查询快,但更新索引时慢(即插入删除慢),用于电商等查询多的应用;

  • ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索
  • Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用

        6、Solr 比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而 Elasticsearch 相对开发维护者较少,更新太快,学习使用成本较高

        所以如果我们在做技术选型的时候,具体选择哪一项技术,还需要根据不同的场景来进行结合选择。

        哈哈哈,好像跑题了,下面我们就正式进入到 elasticsearch 的学习中!

安装elasticsearch

        我们首先来到 es 的官网,根据自己不同的操作系统,点击即可下载最新版本的产品,目前最新版本是Elasticsearch 7.11

官网地址:https://www.elastic.co/cn/start

在这里插入图片描述
        Kibana 是一个免费且开放的用户平台,能够让我们对 Elasticsearch 数据进行可视化,这里我们也一并将其下载到本地
在这里插入图片描述

上传安装包到linux并解压

        我的习惯是将所有的软件包放到/export/software目录下,解压后的目录是/export/servers

[root@node01 software]# tar -zxvf elasticsearch-7.11.0-linux-x86_64.tar.gz -C ../servers/

目录结构

        解压完毕之后,我们先来熟悉es的目录结构

[root@node01 elasticsearch-7.11.0]# ll /export/servers/elasticsearch-7.11.0
总用量 556
drwxr-xr-x.  2 esuser esuser   4096 2月   9 06:48 bin
drwxr-xr-x.  3 esuser esuser    199 2月  13 14:44 config
drwxr-xr-x.  3 esuser esuser     19 2月  13 14:15 data
drwxr-xr-x.  9 esuser esuser    107 2月   9 06:48 jdk
drwxr-xr-x.  3 esuser esuser   4096 2月   9 06:48 lib
-rw-r--r--.  1 esuser esuser   3860 2月   9 06:41 LICENSE.txt
drwxr-xr-x.  2 esuser esuser      6 2月  13 14:47 logs
drwxr-xr-x. 57 esuser esuser   4096 2月   9 06:49 modules
-rw-r--r--.  1 esuser esuser 544318 2月   9 06:46 NOTICE.txt
drwxr-xr-x.  2 esuser esuser      6 2月   9 06:45 plugins
-rw-r--r--.  1 esuser esuser   7263 2月   9 06:41 README.asciidoc

        其中我们常用的目录有:

  • bin:可执行文件在里面,运行es的命令就在这个里面,包含了一些脚本文件等
  • config:配置文件目录
  • JDK:java环境
  • lib:依赖的jar,类库
  • logs:日志文件
  • modules:es相关的模块
  • plugins:可以自己开发的插件
  • data:这个目录没有,自己新建一下,后面要用 -> mkdir data,这个作为索引目录

修改配置文件

        熟悉完es的目录,在启动es前,我们还需要修改一些配置文件

核心配置文件 elasticearch.yml
[root@node01 elasticsearch-7.11.0]# vim config/elasticsearch.yml
  1. 修改集群名称
  2. 修改当前的 es 节点名称
  3. 修改data数据保存地址和日志数据保存地址
  4. 绑定 es 网络 ip
  5. 集群节点修改为之前的节点名称

        具体位置如下图所示:
在这里插入图片描述

修改 jvm 参数

        因为 Elasticsearch 是用 Java 语言开发的,所以我们在配置环节一定少不了修改 jvm 的参数

[root@node01 elasticsearch-7.11.0]# vim config/jvm.options

        根据自己当前操作系统的不同配置,设置不同的大小即可
在这里插入图片描述

添加用户

        比较有意思的一点是,es不允许使用 root 来操作 es,需要我们添加用户,具体的命令如下:

# 1. 创建elsearch用户组及elsearch用户:

groupadd elsearch
useradd elsearch -g elsearch
passwd elsearch# 接下来会输入两次密码
# new password
# retype passwd

# 2. 切换到elsearch用户再启动
su elsearch

启动es

        修改完上面2个配置文件,我们切换到bin目录下,通过./elasticsearch启动es

        不出意外,应该会报如下错误:

ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3795] for user [esuser] is too low, increase to at least [4096]

        我们只需要将最大的线程数设置大一些即可

        我们切换回到root目录

  • 修改/etc/security/limits.conf文件

        添加以下内容

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

        如下图所示:
在这里插入图片描述

  • 修改 /etc/sysctl.conf 增加 vm.max_map_count=262145

在这里插入图片描述
        修改完成之后,使用sysctl -p命令刷新一下,再次切换到 esuser进行启动即可。

记得将防火墙关闭或者将9200端口打开,否则就会出现启动成功,页面无法访问的情况

启动与暂停

        启动与暂停这里也分成2种形式

启动方式1

        我们在bin目录下直接./elasticsearch,可以看到运行结果

在这里插入图片描述
        然后根据自己的 ip:9200进行访问,可以在界面上看到如下返回的结果
在这里插入图片描述
        当前启动方式是前端启动。停止服务的话直接ctrl+c 就好了

启动方式2

        同时,我们也可以后端启动

[esuser@node01 bin]$ ./elasticsearch -d

        稍等片刻,再次访问地址,还是相同结果

        此时,如果想关闭服务

[esuser@node01 bin]$ ps -ef|grep elasticsearch
esuser     2931   2178  0 15:58 pts/0    00:00:00 grep --color=auto elasticsearch

        然后将对应的进程id kill掉即可!
        

        接下来我们需要安装ES的图形化界面插件,也就是elasticsearch-head,这里介绍2种方法,方法1比较麻烦,想省事的同学可以直接划到下方的方法2,利用谷歌插件进行安装,简单高效

安装elasticsearch-head(方法1)

        elasticsearch-head是一款开源软件,被托管在github上面,所以如果我们要使用它,必须先安装git,通过git获取elasticsearch-head

        给大家看下这个项目,已经斩获 7.3K 的start,说明还是非常受大众欢迎
在这里插入图片描述
        我们很容易的通过 git 将其clone到本地,然后上传到 linux 服务器上,然后解压。

        需要注意的是, 运行elasticsearch-head会用到 grunt,而 grunt 需要 npm 包管理器,所以 nodejs 是必须要安装的

安装npm

        当然如果你的环境里已经安装好了npm,那则可以跳过这一步。

(1) 安装gcc
yum install gcc gcc-c++
(2) 下载node国内镜像(推荐)
wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz
(3) 解压并重命名文件夹

        解压

tar -xvf  node-v10.14.1-linux-x64.tar.gz

        然后重命名文件夹

mv node-v10.14.1-linux-x64 node
(4) 添加环境变量
vi /etc/profile

        在文件最后添加以下配置:

export NODE_HOME=/export/servers/node  
export PATH=$NODE_HOME/bin:$PATH
(5) 刷新配置
source /etc/profile
(6) 验证结果
node -v
npm -v

        能够正确显示版本号即说明 nodejs 环境安装成功
在这里插入图片描述

安装cnpm

        我们上面谈到的 npm 命令是 node.js 的 npm 插件管理器,也就是下载插件安装插件的管理器。但我们在使用的时候,下载的都是国外服务器很慢会掉线,所以这一步,我们需要安装淘宝的 npm 镜像cnpm

        也非常简单,执行如下命令即可

npm install -g cnpm --registry=https://registry.npm.taobao.org

排雷:如果遇到this is a problem related to network connectivity, behind a proxy的异常,执行npm config set proxy null将代理设置为空即可再重试上面的命令即可。

        cnpm 正常安装完成之后呢,效果图如下:
在这里插入图片描述

下载依赖

        现在环境都准备好了,那我们该做些什么呢?其实 GitHub 上都已经写明白了
在这里插入图片描述
        有多种方式运行 elasticsearch-head ,我们这里需要用的就是如上所示的内置服务器的方式。

        我们进入到elasticsearch-head的目录下,执行命令,下载相关的依赖

[root@node01 elasticsearch-head]# cnpm install

在这里插入图片描述
        命令执行完毕之后,我们可以在目录下看到多出了node_modules目录,这就是我们下载好的依赖。

在这里插入图片描述
        然后在该目录下执行npm run start命令,启动 elasticsearch-head

[root@node01 elasticsearch-head]# npm run start

> elasticsearch-head@0.0.0 start /export/servers/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
</
  • 55
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 75
    评论
评论 75
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据梦想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值