手把手学会Elasticsearch(一)

2022-12-04 12:54:18 浏览数 (1)

看到标题,相信大家肯定都不陌生,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 不是一个版本

如果你安装的时候出现这么个提示信息。

代码语言:javascript复制
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 的版本就可以了。

第二种:内存问题

如果出现这么个问题,那就比较简单了,因为如果你是自己学习的话,百分之七八十都会出现这个问题,毕竟服务器的性能有限,这个时候就去调整配置,把内存稍微降低一下,

文件目录:

代码语言:javascript复制
config/jvm.options

找到

代码语言:javascript复制
-Xms1g
-Xmx1g

适当性的改小一点就可以了,关于 Elasticsearch 的安装,你学会了么?

0 人点赞