JavaWeb_21_ElasticSearch


本文介绍ElasticSearch。

1. 概述

ElasticSearch,Elastic指的是可伸缩的,Search是查询,总体上来看,核心是查询,只不过查询的功能比较强大。

在互联网中,查询的数据包括:文章,视频,图片等等。

根据数据的格式,可将数据分为

  1. 结构化数据(可采用关系型数据库存储,采用索引来优化)
  2. 非结构化数据(无法用二维表来存储,查询和存储成本较大,比如日志,一般用非关系型数据库)
  3. 半结构化数据(将数据和结构混合在一起,没有明显的区分,比如xml、html文档等,一般采用非关系型数据库,查询不是很容易,无法模糊配,无法匹配所有的数据)。

而ElasticSearch则是为了解决半结构化数据的查询。

Elastic Stack是一个大数据项目,包括ElasticSearch、Kibana(展示)、Beats(采集)和Logstash(采集),统称为ELK Stack,即ELK技术栈。作为Elastic Stack的核心,ElasticSearch集中存储和搜索数据,简称为ES。

ElasticSearch是一个开源的、高扩展的、分布式的、RESTFUL风格的全文搜索和数据分析引擎。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。

1.1 全文搜索

全文搜索也被称为全站搜索,比如博客文章,根据关键字检索,查找出所有匹配的文章,如果是传统数据库,搜索效率较低。

Google,百度类的网站搜索,他们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,他们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。对于这个非结构化的数据文本,关系型数据库搜索不是能很好的支持。

一般传统数据库,全文搜索都实现的很鸡肋,因为一般也没人用数据库存文本字段。进行全文检索需要扫描整个表,如果数据量大的话,即使对SQL的语法优化,也收效甚微。即使建立了索引,但是维护起来也很麻烦,对于insert和update操作都会重新构建索引。

基于以上原因可以分析得出,在一些生产环境中,使用常规的搜索方式,性能是非常差的:

  1. 搜索的数据对象是大量的非结构化的文本数据。
  2. 文件记录量达到数十万或数百万个甚至更多。
  3. 支持大量基于交互式文本的查询。
  4. 需求非常灵活的全文搜索查询。
  5. 对高度相关的搜索结果的有特殊需求,但是没有可用的关系数据库可以满足。
  6. 对不同记录类型、非文本数据操作或安全事务处理的需求相对较少的情况。

为了解决结构化数据搜索和非结构化数据搜索性能问题,我们就需要专业、健壮,强大的全文搜索引擎。

这里说到的全文搜索引擎指的是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似通过字典中的检索字表查字的过程。

因此,需要采用有针对性的搜索引擎。

1.2 Lucene、ElasticSearch、Solr

Lucene是Apache软件基金会Jakarta项目组的一个子项目,提供了一个简单却强大的应用程序接口,能够做全文索引和搜寻。在Java开发环境里的Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。但Lucene只是一个提供全文搜索功能类库的核心工具包,而真正使用它还需要一个完善的服务框架搭建起来进行应用。

目前市面上流行的搜索引擎软件,主流的就两款:ElasticSearch和Solr。这两款都是基于Lucene搭建的,可以独立部署启动的搜索引擎服务软件。由于内核相同,所以两者除了服务器安装、部署、管理、集群以外,对于数据的操作(修改、添加、保存、查询)等都十分类似。

在使用过程中,一般都会将ElasticSearch和Solr这两个软件对比,然后进行选型。这两个搜索引擎都是流行的,先进的开源搜索引擎。它们都是围绕核心底层搜索库-Lucene构建的,但它们都是不同的,对比如下:

image-20221023230020840

总体来看:

  1. 由于易于使用,ElasticSearch在新开发者中更受欢迎。一个下载和一个命令就可以启动一切。
  2. 如果除了搜索文本之外还需要处理分析查询,ElasticSearch是更好的选择。
  3. 如果需要分布式索引,以及需要良好的可伸缩性以及性能分布式环境,ElasticSearch是更好的选择。
  4. ElasticSearch在开源日志管理用例中占据主导地位,许多组织在ElasticSearch中索引它们的日志以使其可搜索。
  5. 如果你喜欢监控和指标,ElasticSearch是更好的选择,因为暴露了更多的关键指标。

2. ElasticSearch入门

2.1 ELasticSearch安装

进入官网免费且开放的搜索:Elasticsearch、ELK 和 Kibana 的开发者 | Elastic,点击立即体验,然后找到ElasticSearch,选择版本下载Download Elasticsearch | Elastic。这里为了简单起见,下载windows版本,方便本地配置。

ElasticSearch基于Java开发的,因此,安装包内置了JDK【可以使用自己的,也可使用内置的JDK,为了避免版本兼容问题,这里使用内置的JDK】

下载之后,解压,目录结构如下所示:

image-20221024222828628

  1. bin:存放可执行脚本文件
  2. config:存放配置文件
  3. jdk:内置的jdk
  4. lib:java所需的第三方类库
  5. logs:日志文件
  6. modules:模块配置
  7. plugins:插件

双击bin下面的elasticsearch.bat即可运行ElasticSearch程序【由于用到C盘的某些文件写入权限,似乎可在配置文件中设置具体的文件,这里先不设置了,以管理员权限运行该脚本即可】。注意,启动成功后,cmd命令行窗口不退出,会绑定两个端口:

  • 9200:浏览器访问的http协议RESTful端口;
  • 9300:ElasticSearch集群间组件的通信端口;

打开浏览器输入:http://localhost:9200,显示如下界面,即表示ElasticSearch启动成功。

image-20221024224831922

2.2 Postman客户端安装

通过上面端口可以发现,9200是访问ElasticSearch服务【也就是向它发送http请求的目的URL】,那么怎么发送请求呢?

如果直接通过浏览器向ElasticSearch服务器发送请求,那么需要在发送的请求中包含HTTP标准的方法,而HTTP的大部分特性仅支持GET和POST方法。所以为了能方便地进行客户端的访问,可以使用Postman软件。

Postman是一款强大的网页调试工具,提供功能强大的WebAPI和HTTP请求调试。Postman中文版能够发送任何类型的HTTP请求(GET、HEAD、POST、PUT等),不仅能够表单提交,且可以附带任意类型请求体。

为了简单起见,采用Postman工具。类似的还有apiPost、apifox、httpclient(IDEA)等

3. ElasticSearch环境

4. ElasticSearch进阶

5. ElasticSearch集成

6. ElasticSearch优化

7. 备注

参考B站《尚硅谷》。


文章作者: 浮云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 浮云 !
  目录