手把手学会Elasticsearch(一)
看到标题,相信大家肯定都不陌生,Elasticsearch,现在很多公司在使用的,也是很多公司在面试的时候很喜欢问的一些题目,而今天阿粉也想着出几篇教程,然后手把手的把ES这块的内容给大家展现出来,让大家都能够系统的学习一下。
什么是Elasticsearch
Elasticsearch 简称 ES,我们先来看看百度百科给的经典回答,
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在 Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby 和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于 Lucene。
说到 Elasticsearch ,就不得不提一句 Solr 和 Lucene,为什么提这两个比较老的技术,是因为,Elasticsearch 和 Solr 全都是基于 Lucene 来实现的。
那么什么是 Lucene ?
什么是Lucene
Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。
阿粉依稀记得,在某些培训机构的教学中,那时候都是教学员们学习的 Lucene 和 Solr,但是现在目前而言,Elasticsearch 才是大家最好的选择。
而 Elasticsearch 为什么要用呢?它都解决了什么问题?
毕竟一门技术的出现,肯定伴随着他的应用,有了应用层面,才会让这个技术更快的被大众所接受,而 Elasticsearch 的出现则是为了处理大量数据而存在。
我们生活中的数据总体分为两种:结构化数据和非结构化数据。
结构化数据
指具有固定格式或有限长度的数据,如数据库,元数据等。
常见的结构化数据也就是数据库中的数据。 通常都是使用 sql语句进行查询,而且能很快的得到查询结果。
非结构化数据
指不定长或无固定格式的数据,如邮件,word 文档等磁盘上的文件
而非结构化的数据,一般有两种方式,顺序扫描和倒排索引。
顺序扫描是什么意思呢?
我们做个最简单的比喻,有一本字典,我想要查找一个字,粉,那如果使用顺序扫描的话,那么就得从头开始一页一页的去找,最终找到这个字所在的页码。
而倒排索引呢?
这种方式最简单的比喻还是一本字典,我要搜索一个字,粉,那么我会从F 开头的地方去寻找,这样我们就能很快的定位到 粉 字所在的页码,然后找到我们的数据。
字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的, 如果字典没有音节表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取 出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,分别只有几种可以一一列举,于是将 读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音 搜到读音,然后按其指向的页数,便可找到我们的非结构化数据——也即对字的解释。
这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-Text Search)
现在我们都已经了解了这个Elasticsearch 那么就得来使用一下这个Elasticsearch了。
Elastic有一条完整的产品线:Elasticsearch、Logstash、Kibana等,前面说的三个就是大家常说的ELK技术栈(开源实时日志分析平台)。
我们一个一个来学习,首先来说这个Elasticsearch,目前已经是8.x的版本了,但是目前可能在普及的,也就是6左右的版本,毕竟没有那么多企业会选择使用最新的版本,因为未知的问题才是最难解决的。
Elasticsearch 安装
我们可以直接来安装 Windows版本的和 Linux 版本的,区别不大,看你个人喜好。
Windows版本的
我们找一个7的版本来进行操作,直接下载,然后解压一下,尽量别解压到中文目录,毕竟我们也说不好万一出了什么问题,定位问题都找不到是什么原因。
直接解压出来我们看看都是什么
● bin
保存的是命令,启动和停止都在这里
● config
配置文件,ES的配置和日志的配置都在这里
● lib
ES的依赖jar包
● logs
不用说了,日志
● moudules
ES依赖组件,在ES启动的时候需要加载的组件
● plugins
第三方插件包,如果IK分词器
然后我们启动一下试试,看看能否启动,如果启动失败,那么再找原因看看。
如果不出意外,一般都是启动成功了,但是也有个例,
然后我们访问一下 http://127.0.0.1:9200/
看到如下画面的时候,证明你的安装是成功的,但是也有很多同学发现,有的时候会报错,一般情况下报错有两种,
第一种:JDK问题
JDK的问题一般都是,电脑安装的 JDK 和 ES 所需要的 JDK 不是一个版本
如果你安装的时候出现这么个提示信息。
future versions of Elasticsearch will require Java 11; your Java version from [/opt/jdk1.8.0_211/jre] does not meet this requirement
那么恭喜你,你被 Elasticsearch 的强依赖 JDK 给安排到了,因为 Elasticsearch 该版本内置了 JDK,而内置的 JDK 是当前推荐的JDK版本。当然如果你本地配置了 JAVA_HOME 那么 ES 就是优先使用配置的JDK启动ES。
如果你使用了一些不支持的JDK版本,ES会告诉你,我启动不了,因为你的 JDK 的原因,你只需要切换一下你的 JDK 的版本就可以了。
第二种:内存问题
如果出现这么个问题,那就比较简单了,因为如果你是自己学习的话,百分之七八十都会出现这个问题,毕竟服务器的性能有限,这个时候就去调整配置,把内存稍微降低一下,
文件目录:
config/jvm.options
找到
-Xms1g
-Xmx1g
适当性的改小一点就可以了,关于 Elasticsearch 的安装,你学会了么?