ElasticSearch介绍 以及Windows Linux Docker的安装

1.1 什么是ElasticSearch

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

1.1.1 什么是全文检索

1.1.1.1 数据分类

我们生活中的数据总体分为两种:结构化数据和非结构化数据。

  • 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。

  • 非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等磁盘上的文件

1.1.1.2 结构化数据搜索

常见的结构化数据也就是数据库中的数据。在数据库中搜索很容易实现,通常都是使用sql语句进行查询,而且能很快的得到查询结果。

为什么数据库搜索很容易?

因为数据库中的数据存储是有规律的,有行有列而且数据格式、数据长度都是固定的。

1.1.1.3 非结构化数据查询方法

(1)顺序扫描法

所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是相当的慢。

(2)全文检索

将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。

扫描二维码关注公众号,回复: 10932867 查看本文章

例如:字典。字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如果字典没有音节表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到我们的非结构化数据——也即对字的解释。

这种先建立索引,再对索引进行搜索的过程就叫全文检索

虽然创建索引的过程也是非常耗时的,但是索引一旦创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建索引是值得的。

1.1.2 如何实现全文检索

可以使用Lucene实现全文检索。Lucene是apache下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能。

1.1.3 全文检索的应用场景

对于数据量大、数据结构不固定的数据可采用全文检索方式搜索,比如百度、Google等搜索引擎、论坛站内搜索、电商网站站内搜索等。

1.1.4 全文检索的实现流程

1.1.4.1 索引和搜索流程图

1587134618092

1、绿色表示索引过程,对要搜索的原始内容进行索引构建一个索引库,索引过程包括:

确定原始内容即要搜索的内容 —->采集文档—->创建文档—->分析文档—->索引文档

2、红色表示搜索过程,从索引库中搜索内容,搜索过程包括:

用户通过搜索界面—->创建查询—->执行搜索,从索引库搜索—->渲染搜索结果

1.1.4.2 创建索引

对文档索引的过程,将用户要搜索的文档内容进行索引,索引存储在索引库(index)中。

1.1.4.3 创建文档对象

获取原始内容的目的是为了索引,在索引前需要将原始内容创建成文档(Document),文档中包括一个一个的域(Field),域中存储内容。

这里我们可以将磁盘上的一个文件当成一个document,Document中包括一些Field(file_name文件名称、file_path文件路径、file_size文件大小、file_content文件内容),如下图:

1587134893118

注意:每个Document可以有多个Field,不同的Document可以有不同的Field,同一个Document可以有相同的Field(域名和域值都相同)

每个文档都有一个唯一的编号,就是文档id。

1.1.4.4 分析文档

将原始内容创建为包含域(Field)的文档(document),需要再对域中的内容进行分析

1.1.4.5 创建索引

索引的目的是为了搜索,最终要实现只搜索被索引的语汇单元从而找到Document(文档)。

注意:创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫**倒排索引结构**。

传统方法是根据文件找到该文件的内容,在文件内容中匹配搜索关键字,这种方法是顺序扫描方法,数据量大、搜索慢。

倒排索引结构是根据内容(词语)找文档,如下图:

正排索引:

1587135796406

转化成倒排索引:

1587135833547

说明:

  • “单词ID”一栏记录了每个单词的单词编号;
  • 第二栏是对应的单词;
  • 第三栏即每个单词对应的倒排列表;
  • 比如单词“谷歌”,其单词编号为1,倒排列表为{1,2,3,4,5},说明文档集合中每个文档都包含了这个单词。

而事实上,索引系统还可以记录除此之外的更多信息,在单词对应的倒排列表中不仅记录了文档编号,还记载了单
词频率信息(TF),即这个单词在某个文档中的出现次数,之所以要记录这个信息,是因为词频信息在搜索结果排序时,计算查询和文档相似度是很重要的一个计算因子,所以将其记录在倒排列表中,以方便后续排序时进行分值计算。

1587136004542

倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。

1.1.4.6 查询索引

查询索引也是搜索的过程。搜索就是用户输入关键字,从索引(index)中进行搜索的过程。根据关键字搜索索引,根据索引找到对应的文档,从而找到要搜索的内容(这里指磁盘上的文件)。

1.1.4.7 用户查询接口

全文检索系统提供用户搜索的界面供用户提交搜索的关键字,搜索完成展示搜索结果。

比如:

1587135251821

1.1.4.8 创建查询

用户输入查询关键字执行搜索之前需要先构建一个查询对象,查询对象中可以指定查询要搜索的Field文档域、查询关键字等,查询对象会生成具体的查询语法,

1.1.4.9 执行查询

搜索索引过程:

根据查询语法在倒排索引词典表中分别找出对应搜索词的索引,从而找到索引所链接的文档链表。

1.1.4.10 渲染结果

以一个友好的界面将查询结果展示给用户,用户根据搜索结果找自己想要的信息,为了帮助用户很快找到自己的结果,提供了很多展示的效果,比如搜索结果中将关键字高亮显示,百度提供的快照等。

1587135434867

1.2 ElasticSearch的使用案例

  • 2013年初,GitHub抛弃了Solr,采取ElasticSearch 来做PB级的搜索。 “GitHub使用ElasticSearch搜索20TB的数据,包括13亿文件和1300亿行代码”
  • 维基百科:启动以elasticsearch为基础的核心搜索架构
  • SoundCloud:“SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务”
  • 百度:百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据
  • 新浪使用ES 分析处理32亿条实时日志
  • 阿里使用ES 构建挖财自己的日志采集和分析体系

第二章 ElasticSearch安装与启动

2.1 windows版本安装

2.1 下载ES压缩包

ElasticSearch分为Linux和Window版本,基于我们主要学习的是ElasticSearch的Java客户端的使用,所以我们课程中使用的是安装较为简便的Window版本,项目上线后,公司的运维人员会安装Linux版的ES供我们连接使用。

ElasticSearch的官方地址: https://www.elastic.co/products/elasticsearch

在资料中已经提供了下载好的6.8.1的压缩包:

1586095774468

2.2 安装ES服务

Window版的ElasticSearch的安装很简单,类似Window版的Tomcat,解压开即安装完毕,解压后的ElasticSearch的目录结构如下:

1586095814960

修改elasticsearch配置文件:config/elasticsearch.yml,增加以下两句命令:


http.cors.enabled: true
http.cors.allow-origin: "*" 

此步为允许elasticsearch跨越访问,如果不安装后面的elasticsearch-head是可以不修改,直接启动。

2.3 启动ES服务

点击ElasticSearch下的bin目录下的elasticsearch.bat启动,控制台显示的日志信息如下:

1586096009037

1563515566282

注意:9300是tcp通讯端口,集群间和TCPClient都执行该端口,9200是http协议的RESTful接口 。

通过浏览器访问ElasticSearch服务器,看到如下返回的json信息,代表服务启动成功:

1563515619311


注意事项一:ElasticSearch是使用java开发的,且本版本的es需要的jdk版本要是1.8以上,所以安装ElasticSearch之前保证JDK1.8+安装完毕,并正确的配置好JDK环境变量,否则启动ElasticSearch失败。

注意事项二:出现闪退,通过路径访问发现“空间不足”

1584099962384

【解决方案】

1584099996946

修改jvm.options文件的22行23行,把2改成1,让Elasticsearch启动的时候占用1个G的内存。

1584100026728

如果1个g还是不行:

1584100045246

-Xmx512m:设置JVM最大可用内存为512M。
-Xms512m:设置JVM初始内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

2.4 安装ES的图形化界面插件

ElasticSearch不同于Solr自带图形化界面,我们可以通过安装ElasticSearch的head插件,完成图形化界面的效果,完成索引数据的查看。安装插件的方式有两种,在线安装和本地安装。本文档采用本地安装方式进行head插件的安装。elasticsearch-5-*以上版本安装head需要安装node和grunt

1)下载head插件:https://github.com/mobz/elasticsearch-head

在资料中已经提供了elasticsearch-head-master插件压缩包:

1563517633809

2)将elasticsearch-head-master压缩包解压到任意目录,但是要和elasticsearch的安装目录区别开

3)下载nodejs:https://nodejs.org/en/download/

1584100753972

在资料中已经提供了nodejs安装程序:

1563517655296

双击安装程序,步骤截图如下:

1563518594298

1563518609245

1563518623835

1563518642447

1563518656861

安装完毕,可以通过cmd控制台输入:node -v 查看版本号

5)将grunt安装为全局命令 ,Grunt是基于Node.js的项目构建工具

在cmd控制台中输入如下执行命令:

npm install -g grunt-cli

-g表示全局(globle)变量,让grunt-cli的客户端使用全局安装

执行结果如下图:

1563519164427

1584251007682

6)进入elasticsearch-head-master目录启动head,在命令提示符下输入命令:


>npm install
>grunt server

1563519995350

如果出现如下问题,就需要重装grunt

1584102677485

7)打开浏览器,输入 http://localhost:9100,看到如下页面:

1563523704620

如果不能成功连接到es服务,需要修改ElasticSearch的config目录下的配置文件:config/elasticsearch.yml,配置文件末尾,增加以下两句命令:

1586096120958


http.cors.enabled: true
http.cors.allow-origin: "*" 

在elasticsearch-head-master文件夹,右键启动cmd命令行窗口,然后重新启动ElasticSearch服务。

1563524104215

1586096009037

【了解淘宝镜像安装】

ps:如果安装不成功或者安装速度慢,可以使用淘宝的镜像进行安装:如果上面安装成功了,后面的就不用关注,直接进入第三章

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

后续使用的时候,只需要把npm xxx 换成 cnpm xxx 即可

执行以下命令(比较慢,需耐心等待)

cnpm install grunt

再次启动grunt server

1584102817081

上面问题解决方法,将下面命令分别执行安装:


cnpm install grunt-contrib-clean
cnpm install grunt-contrib-concat cnpm install grunt-contrib-watch cnpm install grunt-contrib-connect cnpm install grunt-contrib-copy cnpm install grunt-contrib-jasmine 

2.2 Linux版本安装

2.2.1 下载地址

地址:https://www.elastic.co/cn/downloads/elasticsearch

1585964880680

2.2.2 Linux安装


# 创建elsearch用户,Elasticsearch不支持root用户运行
useradd elsearch

# 解压安装包
tar -xvf elasticsearch-6.8.1.tar.gz -C /guigu/es/ # 修改配置文件 vim conf/elasticsearch.yml network.host: 192.168.211.144  #绑定的地址 # 说明:在Elasticsearch中如果,network.host不是localhost或者127.0.0.1的话,就会认为是生产环 # 境,会对环境的要求比较高,我们的测试环境不一定能够满足,一般情况下需要修改2处配置,如下: # 1:修改jvm启动参数 vim conf/jvm.options -Xms128m #根据自己机器情况修改 -Xmx128m # 2:单个进程中的最大线程数 vim /etc/sysctl.conf vm.max_map_count=655360 #启动ES服务 su - elsearch cd bin ./elasticsearch 或 ./elasticsearch -d #后台系统 # 停止服务 root@localhost:~# jps 68709 Jps 68072 Elasticsearch # 通过kill结束进程 kill 68072   

通过访问 http://192.168.211.144:9200 进行测试,看到如下信息,就说明ES启动成功了

1586098114902

2.3 docker版本安装


# 拉取镜像
docker pull elasticsearch:6.8.1
# 创建容器 docker create --name elasticsearch --net host -e "discovery.type=single-node" -e "network.host=192.168.211.144" elasticsearch:6.8.1 # 启动 docker start elasticsearch # 查看日志 docker logs elasticsearch

猜你喜欢

转载自www.cnblogs.com/wzlbigdata/p/12729623.html