什么是es?

搜索引擎,它的功能也类似一个数据库,能高效的从大量数据中搜索匹配指定关键字的内容,它也将数据保存在硬盘中,它本质就是一个java项目,使用它进行数据的增删改查就是访问这个项目的控制器方法(url路径),底层技术是Lucene,对其进行了封装,实现了开箱即用。

使用es的原因:

数据库的模糊查询效率低(所有关系型数据库都有这个缺点),es使用了索引,将模糊查询效率提高了100倍左右,但是索引也会占用一部分空间,所以还是等同于用空间换时间,也遵从最左匹配原则,所以前模糊也用不了索引。

es运行的原理:

es有一个分词器,然后通过分词就可以生成对应的索引(词和索引就像键值对)。

es的启动:

linux系统的启动:

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

然后就是es的使用:

首先还是添加依赖:

 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Spring Data Elasticsearch 整合SpringBoot的依赖   --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency></dependencies>

然后在项目中创建一个http文件

文件中这样写:

### 三个#是注释,也是分隔符,http文件要求每个请求必须以分隔符开始,否则会报错
GET http://localhost:9200### 测试ES的分词功能,运行请求,查看分词结果
POST http://localhost:9200/_analyze
Content-Type: application/json{"text": "my name is hanmeimei","analyzer": "standard"
}

但是实际上其因为词库问题,中文分词可能有出入,所以可以添加一个分词插件 ik

安装完成后重启es然后就可以在刚刚的http文件中

{"text": "罗技激光鼠标","analyzer": "ik_smart"
}

来测试分词效果,这个analyzer就是选用的分词器。我们可以修改

POST http://localhost:9200/_analyze
Content-Type: application/json{"text": "北京冬季奥林匹克运动会顺利闭幕","analyzer": "ik_max_word"
}

ik_smart

  • 优点:特征是粗略快速的将文字进行分词,占用空间小,查询速度快

  • 缺点:分词的颗粒度大,可能跳过一些重要分词,导致查询结果不全面,查全率低

ik_max_word

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

在springboot中使用es:

首先还是添加依赖,上面的依赖可复用。

然后修改配置文件,

# 配置ES的ip和端口
spring.elasticsearch.rest.uris=http://localhost:9200# 设置日志门槛
logging.level.cn.tedu.search=debug
# SpringDataElasticsearch框架中日志输出专用类也要设置debug
logging.level.org.elasticsearch.client.RestClient=debug

然后创建es需要使用的实体类

@Data
@Accessors(chain = true)    // 支持链式set赋值
@AllArgsConstructor         // 自动生成包含全部参数的构造方法
@NoArgsConstructor          // 自动生成无参数的构造方法// @Document注解标记当前类是ES框架对应的实体类
// 属性indexName指定ES中对应的索引名称,运行时,如果这个索引不存在,SpringData会自动创建它
@Document(indexName = "items")
public class Item implements Serializable {// SpringData通过@Id标记当前实体类的主键属性@Idprivate Long id;// @Field是SpringData标记普通属性的注解// type是定义这个属性的类型,FieldType.Text是支持分词的字符串,后面要定义两个分词器@Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")private String title;// Keyword是不需分词的字符串类型@Field(type = FieldType.Keyword)private String category;@Field(type = FieldType.Keyword)private String brand;@Field(type = FieldType.Double)private Double price;// imgPath是图片路径,路径不会成为搜索条件,所以这个列可以不创建索引,节省空间// index = false,就是不创建索引的设置// 但是需要注意,不创建索引并不是不保存这个数据,ES中仍然保存imgPath的值@Field(type = FieldType.Keyword,index = false)private String imgPath;// images/2022/11/28/18239adc-8ae913-abbf91.jpg
}

然后创建mapper层:这个es自己就有,我们直接继承使用就可以了,在需要自定义查询的时候通过方法名就可以让其自己生成对应的查询了。非常的萤杏花!

// Repository是Spring家族对持久层包名\类名\接口名的规范
@Repository
public interface ItemRepository extends ElasticsearchRepository<Item,Long> {// ItemRepository接口要继承SpringData框架提供的父接口ElasticsearchRepository// 一旦继承,当前接口就可以编写使用父接口中提供的连接ES的方法了// 继承父接口后,SpringData会根据我们在泛型中指定的Item实体类,找到对应的索引// 并生成操作这个索引的基本增删改查方法,我们自己无需编写// ElasticsearchRepository<[要操作的实体类名称],[实体类主键的类型]>
}

我们可以通过方法名中加orderby完成排序查询:

// 排序查询
Iterable<Item> queryItemsByTitleMatchesOrBrandMatchesOrderByPriceDesc(String title,String brand);

然后又有一个问题就是数据量大的话,我们就需要通过分页查询来提高效率,直接在这个接口中就可以写

// 分页查询
// 返回值类型需要修改为Page类型,这个类型既可以保存从ES中查询出的数据
// 又可以保存当前分页查询的分页信息例如:当前页码,每页条数,总条数,总页数,有没有上一页,有没有下一页等
// 参数方面,需要在参数列表末尾添加一个Pageable类型的参数
// 这个类型的对象包含要查询的页码和每页的条数
Page<Item> queryItemsByTitleMatchesOrBrandMatchesOrderByPriceDesc(String title, String brand, Pageable pageable);

以上均为本人自己的理解,所以可能出现一些问题和不规范的地方,(主要还是为了方便cv),有什么问题欢迎各位大佬进行修改补充!

关于ElasticSearch (ES)相关推荐

  1. [Elasticsearch] es 6.6 编译报错 SSL peer shut down incorrectly

    1.概述 前提:[Elasticsearch] es 6.6 编译报错 java.net.ConnectException: Operation timed out Mac 编译es 6.8 报错 [ ...

  2. ElasticSearch (ES)学习之路(二)Win10安装ES,可视化界面,Kibanna

    ElasticSearch (ES)学习之路(二)Win10安装ES,可视化界面,Kibanna 我前一段时间学习的时候ES 还是7.6.x 现在看ES 官网已经到了7.8.X了,迭代维护的速度还是挺 ...

  3. ElasticSearch es 插件开发

    ElasticSearch es 插件开发 1. 插件分类 API Extension Plugins API扩展插件 通过添加新的API或功能向Elasticsearch添加新功能,通常与搜索或映射 ...

  4. ElasticSearch(ES)

    文章目录 备注.必看 ElasticSearch 和 Solr 介绍,对比 ElasticSearch 7.8. 官网 基本概念 Cluster(集群) 与 Node(节点) Index -索引 索引 ...

  5. Elasticsearch(ES)的下载与安装

    Elasticsearch(ES)的下载与安装 1.安装 Java 在安装 Elasticsearch 之前,我们需要安装并配置好 JDK, 设置好环境变量 $JAVA_HOME. Elasticse ...

  6. ElasticSearch -- ES 7.x 集群版安装部署

    向导 1. ElasticSearch 1.下载 2.配置 3.查看启动状态 4.注册宕机.开机自启 5.如果磁盘是SSD,建议修改IO调度算法 6.SSD磁盘,关闭numa绑核.hugepage 2 ...

  7. elasticsearch(es)分布式全文检索引擎 简介

    0. 带着问题上路-ES是如何产生的? (1)思考:大规模数据如何检索? 如:当系统数据量上了10亿.100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题: 1)用什么数据库好?(MyS ...

  8. 使用canal同步MySQL数据到Elasticsearch(ES)

    目录 1.功能及使用场景 1.1.功能介绍 1.2.使用场景 2.需求引入 3.canal文件下载及准备 3.1 下载文件 3.2 准备文件 4.deployer安装及效果测试 4.1.deploye ...

  9. [Elasticsearch] es 6.6 编译报错 java.net.ConnectException: Operation timed out

    1.概述 Mac 编译es 6.8 报错 [lcc@lcc ~/IdeaProjects/source_code/elasticsearch]$ ./gradlew assemble Download ...

  10. Elasticsearch(ES) 基本知识

    ES 学习笔记 Linux 安装ES及Kibana(7.17.4版本) ES基本使用 ES是一个基于Apache的开源索引库Lucene而构建的 开源.分布式.具有RESTful接口的全文搜索引擎, ...

最新文章

  1. 物料编码原则有码还是无码
  2. 怎么查看电脑内存和配置_电脑内存条如何选择?老司机带你如何选择电脑内存条...
  3. 微软企业库Unity学习笔记
  4. 人群与网络:关系的平衡
  5. Vue基础应用-实现计数器
  6. Hudi on Flink 快速上手指南
  7. java js 打开摄像头_js调用网络摄像头
  8. 计算机思维导论在线作业答案,大学计算机计算思维导论第讲习题及解析.pdf
  9. 华胜天成助力中国银联实现移动互联时代的多渠道扩张
  10. Android智能硬件开发心得总结(一)
  11. 谷歌应用程序无法启动,因为应用程序的并行配置不正确的问题解决方案
  12. 笔记本vmware利用无线网卡上网设置
  13. vue中数字转金额格式
  14. springboot毕设项目养老院信息管理系统kak2w(java+VUE+Mybatis+Maven+Mysql)
  15. 深拷⻉浅拷⻉的区别?如何实现⼀个深拷⻉?
  16. 如何在word、pdf、ppt中导入字体
  17. 如何定位有故障的显卡,查看序列号,更换
  18. HCJ2:页面两栏式或三栏式布局
  19. 百度云安装mysql_安装mysql5.7和mysql8.0(可同时安装在windows中)附百度云下载链接
  20. docker查看mysql日志_Docker 容器日志分析

热门文章

  1. 计算机安装Hp1005打印机,hp1005打印机驱动官方版
  2. 大模型多模态Chatgpt+自动驾驶控制器设计方案
  3. 每日一犬 · 波尔多犬
  4. excel中统计每一行中指定字体颜色和填充颜色的单元格求和(不使用VBA)
  5. 华为U-SYS系统力助运营商实施转型
  6. 计算机保存不了自动还原,win7系统颜色校准无法保存开机自动还原默认的处理步骤...
  7. sql 累计占比_sql中查询占百分比percent和通配符的使用
  8. 去掉数组中重复出现元素的算法
  9. 【matlab图像处理】插值方法
  10. 【Flume】Flume入门