SpringBoot——检索

  • 一、检索基本概念
  • 二、安装测试
  • 三、elasticsearch基本使用
    • 1、索引数据
    • 2、检索文档
    • 3、检查是否存在
    • 4、删除
    • 5、轻量搜索
  • 四、SpringBoot-elasticsearch整合
    • 1、SpringBoot集成ElasticSearch的几种方式
    • 2、版本对应关系
    • 3、引入依赖
    • 4、application.properties
    • 5、存储数据
    • 6、检索数据
    • 7、更新数据
    • 8、获取数据
    • 9、删除数据

一、检索基本概念

1、ElasticSearch简介
开源的ElasticSearch (ES)是一个分布式、可扩展、实时的搜索与数据分析引擎。Spring Boot通过整合Spring Data ElasticSearch为我们提供了非常便捷的检索功能支持。

Elasticsearch 使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API(通过请求的方式进行检索),底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能,github等大型的站点也是采用了ElasticSearch作为其搜索服务。

ElasticSearch :

  • 一个分布式的实时文档存储,每个字段 可以被索引与搜索
  • 一个分布式实时分析搜索引擎
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

2、特点
(1)面向文档:
Elasticsearch 是 面向文档 的,意味着它存储整个对象或 文档。Elasticsearch 不仅存储文档,而且 索引 每个文档的内容,使之可以被检索。在 Elasticsearch 中,我们对文档进行索引、检索、排序和过滤—​而不是对行列数据。这是一种完全不同的思考数据的方式,也是 Elasticsearch 能支持复杂全文检索的原因。

(2)JSON序列化:
Elasticsearch 使用 JavaScript Object Notation(或者 JSON)作为文档的序列化格式。JSON 序列化为大多数编程语言所支持,并且已经成为 NoSQL 领域的标准格式。

注:
Lucene是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎(Elasticsearch)。

3、ElasticSearch架构

三条数据id1,2,3,每一个json数据都是一个文档。索引、类型、文档就类比于Mysql中的数据库、数据表、行列数据。

二、安装测试

1、搜索镜像

docker search elasticsearch


2、拉取镜像

docker pull
ez.mirror.aliyuncs.com/library/elasticsearch

3、查看

docker images

4、运行
elasticsearch是用Java写的,在运行时会默认占用2G的堆内存空间,我们可以使用-e来限制堆内存的使用。

docker run -e ES_JAVA_OPTS="-Xms256m -Xms256m" -d
-p 9200:9200 -p 9300:9300 --name ES01 5acf0e8da90b

elasticsearch各个节点间的通信使用9300端口,web通信检索使用9200端口

5、检查
docker ps检查是否已经运行,若没有运行查看所有容器dockers ps -a

docker ps

6、测试
对9200、9300开放端口:关闭防火墙或者开启云服务器的端口。

访问服务器的9200端口:

三、elasticsearch基本使用

elasticsearch官方文档:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

1、索引数据

向elasticsearch中存储数据

使用Postman发送数据:
发送PUT请求:http://IP地址:9200/megacorp/employee/1

{"first_name" : "John","last_name" :  "Smith","age" :        25,"about" :      "I love to go rock climbing","interests": [ "sports", "music" ]
}

路径 /megacorp/employee/1 包含了三部分的信息:

  • megacorp:索引名称
  • employee:类型名称
  • 1:雇员的ID

收到响应:

2、检索文档

发送GET请求:http://IP地址:9200/megacorp/employee/1

其中的version代表了修改版本。

3、检查是否存在

发送Head请求,如果数据存在,则显示200:

4、删除

发送DELETE请求,删除的文档不存在,则显示404。

5、轻量搜索

(1)搜索所有雇员:
GET /megacorp/employee/_search

(2)搜索last_name为Smith的雇员
GET /megacorp/employee/_search?q=last_name:Smith

(3)发送查询表达式进行查询
POST /megacorp/employee/_search

{"query" : {"match" : {"last_name" : "Smith"}}
}

(4)全文搜索
POST /megacorp/employee/_search
搜索所有喜欢攀岩(rock climbing)的员工,match得到所有相似性结果。

{"query" : {"match" : {"about" : "rock climbing"}}
}

(5)短语检索
match_phrase,得到完全匹配的结果。

POST /megacorp/employee/_search

{"query" : {"match_phrase" : {"about" : "rock climbing"}}
}

(6)高亮搜索
POST /megacorp/employee/_search

{"query" : {"match_phrase" : {"about" : "rock climbing"}},"highlight": {"fields" : {"about" : {}}}
}

返回的响应中,about对应的搜索字段,加入了html高亮标签,方便浏览器处理。

"highlight": {"about": ["I love to go <em>rock</em> <em>climbing</em>" ]}

四、SpringBoot-elasticsearch整合

最新的操作可以参考SpringBoot官方文档:https://docs.spring.io/spring-data/elasticsearch/docs/4.1.2/reference/html/#preface.metadata

1、SpringBoot集成ElasticSearch的几种方式

ES支持两种协议

  • HTTP协议,支持的客户端有Jest client和Rest client
  • Native Elasticsearch binary协议,也就是Transport client和Node client

HTTP协议:
Jest client非官方支持,在ES5.0之前官方提供的客户端只有Transport client、Node client。在5.0之后官方发布Rest client,并大力推荐。

Native Elasticsearch binary协议:
Transport client(7.0弃用)和Node client(2.3弃用)区别:这两个都是最早的两个客户端,Transport client是不需要单独一个节点。Node client需要单独建立一个节点,连接该节点进行操作,ES2.3之前有独立的API,ES2.3之后弃用该API,推荐用户创建一个节点,并用Transport client连接进行操作。

ReactiveElasticsearchClient:
The ReactiveElasticsearchClient is a non official driver based on WebClient. It uses the request/response objects provided by the Elasticsearch core project. Calls are directly operated on the reactive stack, not wrapping async (thread pool bound) responses into reactive types.

官方强烈建议使用Java High Level Rest Client,而不是Transport client。


Rest client分为:Java Low Level Rest Client和Java High Level Rest Client

现在SpringBoot2.4.1默认支持Java High Level Rest Client。

2、版本对应关系


3、引入依赖

SpringBoot默认使用SpringData elasticsearch模块进行操作。

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

4、application.properties

spring.elasticsearch.rest.uris=http://127.0.0.1:9200

5、存储数据

@Autowired
RestHighLevelClient restHighLevelClient;@Test
void add() {Map<String, Object> map = new HashMap<String, Object>();map.put("id", "20190909");map.put("name", "测试");map.put("age", 22);try {IndexRequest indexRequest = new IndexRequest("content", "doc", map.get("id").toString()).source(map);IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);System.out.println(indexResponse.toString());} catch (Exception e) {e.printStackTrace();}
}

结果:

6、检索数据

有点问题:

SearchRequest searchRequest = new SearchRequest().indices("content").types("doc");

7、更新数据

@Test
void update() {Map<String, Object> map = new HashMap<String, Object>();map.put("id", "20190909");map.put("name", "测试-update");map.put("age", 22);try {UpdateRequest request = new UpdateRequest("content", "doc", map.get("id").toString()).doc(map);UpdateResponse updateResponse = restHighLevelClient.update(request, RequestOptions.DEFAULT);System.out.println(updateResponse.toString());} catch (Exception e) {}
}

数据更新之后:

8、获取数据

@Test
void get() {try {GetRequest request = new GetRequest("content", "doc", "20190909");GetResponse getResponse = this.restHighLevelClient.get(request, RequestOptions.DEFAULT);System.out.println(getResponse.toString());} catch (Exception e) {}
}

9、删除数据

@Test
void delete() {try {DeleteRequest request = new DeleteRequest("content", "doc", "20190909");DeleteResponse deleteResponse = this.restHighLevelClient.delete(request, RequestOptions.DEFAULT);System.out.println(deleteResponse.toString());} catch (Exception e) {}
}

参考博客:https://blog.csdn.net/qq_25012687/article/details/101050412

SpringBoot——检索相关推荐

  1. 第10章尚硅谷SpringBoot检索

    第10章尚硅谷SpringBoot检索 P20.尚硅谷-SpringBoot高级-检索-Elasticsearch简介&安装 P21.尚硅谷-SpringBoot高级-检索-Elasticse ...

  2. 总结尚硅谷的视频springboot视频

    这16个章节也就讲个大概,更多内容需要你自己去学习. 第1章尚硅谷SpringBoot入门 P01.尚硅谷_SpringBoot_入门-课程简介 P02.尚硅谷_SpringBoot_入门-Sprin ...

  3. docker 买了腾讯服务器后的学习

    腾讯云买了   打算用 登录成功后: Last login: Mon Nov 11 13:37:02 2019 from 221.12.17.87 [root@VM_0_13_centos ~]# i ...

  4. SpringBoot高级-检索-Elasticsearch简介安装

    SpringBoot与检索,主要介绍使用ElasticSearch,包括我们来整合SpringBoot来进行操作,我们说全文检索功能,是我们现在非常常见的一个需求,我们这个开源的ElasticSear ...

  5. Elasticsearch学习2 SpringBoot整合 测试复杂检索

    文章目录 五.SpringBoot整合 1.基本步骤 2.保存数据 3.测试复杂检索 五.SpringBoot整合 选择Java High Level REST Client 官方文档:Java RE ...

  6. ElasticSearch实战系列02 SpringBoot + ElasticSearch 7.7 实现高仿QQ用户搜索:中文+拼音混合检索,并高亮显示

    本文导读 本文仿照QQ的用户搜索,搭建一个中文+拼音的混合检索系统,并高亮显示检索字段.全文共分为以下几部分: 1.项目简介,包括需求描述与分析等: 2.项目开发,通过两个版本的index,验证并完成 ...

  7. SpringBoot高级-检索-SpringBoot整合Jest操作ES

    接下来就用SpringBoot来整合ElasticSearch进行测试,pom文件引入了spring-boot-starter-data-elasticsearch,其实加了data都是用spring ...

  8. 尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门

    前面我们安装好了ElasticSearch,我以后就简称他为ES,而一些人还不知道基本的使用,那我们接下来做一个快速入门,了解一下他的使用方法,以及一些基本概念,方便我们后来整合,那么要学习ES最好的 ...

  9. nodejs+vue+elementui中国古诗词检索查询系统springboot+java

    选择一个优秀的前端框架,可以节省很多的布局时间,并能够高效率高质量的显示数据内容,提高客户的满意度,在本系统中,选择Vue前端框架.Vue是一套便于用户使用的前端框架,采用渐进式模式进行设计,可以从底 ...

  10. class没有发布到tomcat_Tomcat 在 SpringBoot 中是如何启动的

    前言[1] 从 Main 方法说起[2] 走进 Tomcat 内部[3] 总结[4] <Java 2019 超神之路> <Dubbo 实现原理与源码解析 -- 精品合集> &l ...

最新文章

  1. EF-CodeFirst-域模型配置
  2. webform开发经验(一):Asp.Net获取Checkbox选中的值
  3. python重启程序代码_重启python程序
  4. OpenCASCADE:拓扑 API之对象修改
  5. 什么是Cortex、ARMv8、arm架构、ARM指令集、soc
  6. oracle获取序列并赋值,Oracle中序列的使用
  7. git ssh创建分支_将git项目导入GitHub的方法(附创建分支)
  8. 从治疗癌症到预测犯罪,细数数据科学在各领域的神奇应用
  9. hibernate、mysql、中文字符问题
  10. init_MUTEX被废除
  11. Android 原创新作 超级水平仪 发布
  12. 概率论基础知识(书本摘录总结)
  13. windows 下安装redis
  14. 【Pix4d精品教程】Pix4d项目空三结果精度评估完整解决方案(建议收藏)
  15. 15b万用表怎么测电容_万用表怎么用?福禄克15B+一机详解万用表的使用方法
  16. java docx4j 合并word_如何使用docx4j在word中添加合并字段?
  17. JavaSE----基础语法(数组)
  18. Vue3+Naive踩坑
  19. 备战秋招-oppo java一面 面经
  20. 干货:嵌入式系统设计开发大全!(万字总结)-道合顺大数据infinigo

热门文章

  1. Wireshark入门-Wireshark
  2. Android探索之百度地图开发
  3. efi分区隐藏_win10如何隐藏efi分区|win10如何隐藏efi分区的方法
  4. wordpress网站被挂马处理
  5. java按顺序生成编号_Java生成有规则的编号
  6. 手机虚拟键盘的设置显示隐藏
  7. insmod: ERROR: could not insert module my_block.ko: File exists
  8. 中英文数据库检索策略对比
  9. ppt矩形里面的图片怎么放大缩小_如何在PPT中插入大量图片而又保持其美感?
  10. Windows server2016 计算机管理中找不到用户和组