Java Spring Cloud VIII 之 Elasticsearch I

Elasticsearch

1.Elasticsearch概述

elastic:富有弹性的

search:搜索

在计算机开发界简称ES

这个软件不是SpringCloud的组件,甚至其他语言都可以使用它

是一个java开发的软件,所以启动需要java环境变量

功能是从大量数据中根据指定的关键字搜索出匹配的结果

这样的软件有一个名称全文搜索引擎

使用它的方式是访问它提供的控制器方法,它开发了多种控制器方法

访问不同方法实现对数据的增删改查

ES也是将数据保存在硬盘上的

常见面试题ES的实现结构

java有一套名为Lucene的API

是搜索引擎的核心支持,Elasticsearch在Lucene的基础上开发出了一个功能全面的开箱即用的全文搜索引擎

市面上ES的竞品有

Solr/MongoDB

2.为什么使用Elasticsearch

因为我们之前学习的所有关系型数据库都有一个严重的性能缺陷

mysql\mariaDB\oracle\DB2等

就是前模糊的模糊查询不能使用索引

select * from spu where spu_name like '%鼠标%'

测试证明一张千万级别的数据库表进行模糊查询需要20秒以上

当今需求"三高"的需求下,不能接受这样的性能

我们使用ES来优化后同样的查询我们能将效率提高100倍

将大型的查询也能控制在毫秒级别

3.Elasticsearch查询原理

如果不使用ES让数据库查询,没有索引加持的模糊查询就是全表搜索性能差

但是Elasticsearch可以利用添加数据库完成对数据的分词倒排索引形成索引库

在查询时直接查询索引库,获得符合查询条件的数据信息

JAVA中对es的json处理 java中的es是什么_JAVA中对es的json处理

4.关于数据库的索引

所谓索引其实就是数据库中数据的目录

目的是能够提高查询的效率

数据库索引分类

  • 聚集索引
  • 非聚集索引

聚集索引就是数据库保存数据的物理顺序,一般都是id,所以按物理顺序查询也就是按id查询效率非常高

如果再定义其他索引,就是非聚集索引了

如果数据表中有一个姓名列,我们为姓名列创建索引

例如有"张三"这个姓名,添加索引后,查询的话效率会明显提升

但是如果不创建索引,去查询张三,就只能逐行检索姓名列是否为张三,查询效率低

常见面试题:索引的使用规则和注意事项

  1. 索引会占用数据库空间
  2. 对数据进行增删改操作,可能会引起索引的更新,效率会低
  3. 操作数据库时先添加数据,再创建索引
  4. 不要对数据样本少的列添加索引
  5. 每次查询从数据库中查询结果越多,索引的效果越低
  6. 使用where字句查询时,将具有索引的列放在第一个条件

经过我们对索引的简单了解,我们需要知道索引的基本概念和使用

所有关系型数据库都有一个缺陷,就是模糊查询时(查询条件前模糊),是不能利用索引进行查询的

一定会引起全表搜索,查询效率非常低

JAVA中对es的json处理 java中的es是什么_elasticsearch_02

5.Elasticsearch的启动

官方下载链接

https://www.elastic.co/cn/downloads/past-releases#elasticsearch

课程中使用7.6.2版本

压缩包280M左右,复制到没有中文,没有空格的目录下解压

双击elasticsearch.bat运行

JAVA中对es的json处理 java中的es是什么_elasticsearch_03


运行之后可能看到下面界面

JAVA中对es的json处理 java中的es是什么_elasticsearch_04


这个界面不能关闭,一旦关闭ES就停止了

我们启动ES双击这个bat文件即可,当然也可以设置Idea的shell script

验证ES是否在运行

浏览器输入地址:localhost:9200看到如下内容即可

JAVA中对es的json处理 java中的es是什么_spring_05


mac系统启动

tar -xvf elasticsearch-7.6.2-darwin-x86_64.tar.gz 
cd elasticsearch-7.6.2/bin 
./elasticsearch

linux:

tar -xvf elasticsearch-7.6.2-linux-x86_64.tar.gz
cd elasticsearch-7.6.2/bin
./elasticsearch

我是将军;我一直都在,。!