Elasticsearch概述

Elasticsearch概述

什么是Elasticsearch

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

类似的有Solr/MongoDB

为什么使用Elasticsearch

所有关系型数据库都有一个严重的性能缺陷

mysql\mariaDB\oracle\DB2等

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

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

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

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

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

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

Elasticsearch查询原理

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

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

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

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

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

数据库索引分类

  • 聚集索引
  • 非聚集索引

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

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

Elasticsearch的启动

官方下载链接

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

双击elasticsearch.bat运行

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

在这里插入图片描述

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

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

验证ES是否在运行

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8x2kAXqh-1656428090720)(D:\JavaStudyProject\csmall-class-cgb2202\node\day06\image-20220510104421448.png)]
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

ES基本使用

ES需要添加的依赖

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter</artifactId>
      </dependency>
   </dependencies>

利用IDEA来测试ES

先创建一个HTTP Request文件 http client(http客户端)

GET http://localhost:9200

获得的结果和之前浏览器响应结果一致,表示当前http client文件正常运行

### 注释和分隔符,每次编写请求前,都要先编写3个#
GET http://localhost:9200

### ES分词测试  analyze(分析)
POST http://localhost:9200/_analyze
Content-Type: application/json

{
  "text": "罗技激光无线游戏鼠标",
  "analyzer": "standard"
}

详解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5wLg5Pt8-1656428090720)(C:\Users\彭\AppData\Roaming\Typora\typora-user-images\image-20220628224729396.png)]

我们代码中编写的"analyzer": "standard"是默认分词器

这个分词器只能对英文等西文字符(有空格的),进行分词

但是中文分词不能按空格分

我们使用开源的分词词库IK实现中文分词

安装插件之后要重启ES生效

ES启动之后,将中文分词器插件设置完成,在运行分词

{
  "text": "罗技激光无线游戏鼠标",
  "analyzer": "ik_smart"
}

再次运行分词测试,应该看到正常的中文分词效果

ik分词插件的使用

我们安装的ik实际上不只一个分词器

实际上除了ik_smart之外还有ik_max_word

实际上除了ik_smart之外还有ik_max_word

### ES分词测试  analyze(分析)
POST http://localhost:9200/_analyze
Content-Type: application/json

{
  "text": "北京顺利举办了冬季奥林匹克运动会",
  "analyzer": "ik_smart"
}
### ES分词测试  analyze(分析)
POST http://localhost:9200/_analyze
Content-Type: application/json

{
  "text": "北京顺利举办了冬季奥林匹克运动会",
  "analyzer": "ik_max_word"
}

上面的运行会有不同的分词效果

总体来说区别如下

ik_smart

  • 优点:特征是粗略快速的将文字进行分词,占用空间小,查询速度快
  • 缺点:分词的颗粒度大,可能跳过一些分词,导致查询结果不全面

ik_max_word

  • 优点:特征是详细的文字片段进行分词,查询时查全率高,不容易遗漏数据
  • 缺点:因为分词太过详细,导致有一些无用分词,占用空间较大,查询速度慢

使用ES操作数据

ES保存数据的结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6pYVmvgW-1656428090720)(C:\Users\彭\AppData\Roaming\Typora\typora-user-images\image-20220628225211747.png)]

  • ES启动后,可以创建多个index(索引),index相当于数据库中表的概念

  • 一个index可以创建保存多个document(文档),一个document相当于表中的一行数据

  • 一个document中可以有多个属性和对应的值,相当于一行数据中字段和字段的值

项目node文件夹下共享了ES文档,命令都在里面,可以测试

…(img-6pYVmvgW-1656428090720)]

  • ES启动后,可以创建多个index(索引),index相当于数据库中表的概念

  • 一个index可以创建保存多个document(文档),一个document相当于表中的一行数据

  • 一个document中可以有多个属性和对应的值,相当于一行数据中字段和字段的值

项目node文件夹下共享了ES文档,命令都在里面,可以测试

可以通过Spring Data来连接ES

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值