ElasticSearch-学习笔记05【SpringDataElasticSearch】
- Java后端-学习路线-笔记汇总表【黑马程序员】
- ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】
- ElasticSearch-学习笔记02【ElasticSearch索引库维护】
- ElasticSearch-学习笔记03【ElasticSearch集群】
- ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】
- ElasticSearch-学习笔记05【SpringDataElasticSearch】
目录
12-SpringDataElasticsearch工程搭建
01、导入pom.xml坐标
02、配置applicationContext.xml文件
13-SpringDataES工程配置
14-SpringDataES创建索引
15-SpringDataES添加文档
16-SpringDataES删除文档
17-SpringDataES更新文档
18-SpringDataES简单查询
19-自定义查询方法查询
20-使用NativeSearchQuery查询
21-ElasticSearch课程总结
01、项目文件一览图
02、工程详细代码
01、Article.java
02、ArticleRepository.java
03、SpringDataElasticSearchTest.java
12-SpringDataElasticsearch工程搭建
一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式二、使用ES客户端实现搜索
1、根据id搜索
2、根据Term查询(关键词)
3、QueryString查询方式(带分析的查询)
4、分页的处理
5、查询结果高亮显示三、SpringDataElasticSearch
1、工程搭建
1)创建一个java工程。
2)把相关jar包添加到工程中,如果maven工程就添加坐标。
3)创建一个spring的配置文件
1、配置elasticsearch:transport-client
2、配置elasticsearch:repositories,包扫描器,扫描dao
3、配置elasticsearchTemplate对象,就是一个bean
01、导入pom.xml坐标
新建maven工程“springdata-elasticsearch”,导入jar包:
02、配置applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/data/elasticsearchhttp://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd"><!--elastic客户对象的配置--><elasticsearch:transport-client id="esClient" cluster-name="my-elasticsearch" cluster-nodes="127.0.0.1:9301, 127.0.0.1:9302, 127.0.0.1:9303"/><!--配置包扫描器,扫描dao的接口--><elasticsearch:repositories base-package="com.itheima.repositories"/><!--bean--><bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate"><constructor-arg name="client" ref="esClient"/></bean>
</beans>
13-SpringDataES工程配置
14-SpringDataES创建索引
java.lang.IllegalStateException: Failed to load ApplicationContext 解决办法
import com.itheima.es.entity.Article;
import com.itheima.es.repositories.ArticleRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")//加载配置文件初始化spring容器public class SpringDataElasticSearchTest {@Autowiredprivate ArticleRepository articleRepository;@Autowiredprivate ElasticsearchTemplate template;@Testpublic void createIndex() throws Exception {//创建索引并配置映射关系template.createIndex(Article.class);//配置映射关系//template.putMapping(Article.class);}
}
15-SpringDataES添加文档
16-SpringDataES删除文档
17-SpringDataES更新文档
ES的底层是Lucene,Lucene更新原理是先添加再删除。
18-SpringDataES简单查询
19-自定义查询方法查询
20-使用NativeSearchQuery查询
21-ElasticSearch课程总结
一、使用Java客户端管理ES
1、创建索引库
步骤:
1)创建一个Java工程
2)添加jar包,添加maven的坐标
3)编写测试方法实现创建索引库
1、创建一个Settings对象,相当于是一个配置信息,主要用于配置集群的名称
2、创建一个客户端Client对象
3、使用client对象创建一个索引库
4、关闭client对象
2、使用Java客户端设置Mappings
步骤:
1)创建一个Settings对象
2)创建一个Client对象
3)创建一个mapping信息,应该是一个json数据,可以是字符串也可以是XContextBuilder对象
4)使用client向es服务器发送mapping信息
5)关闭client对象
3、添加文档(一行数据)
步骤:
1)创建一个Settings对象
2)创建一个Client对象
3)创建一个文档对象,创建一个json格式的字符串或者使用XContentBuilder
4)使用Client对象把文档添加到索引库中
5)关闭client
4、添加文档的第二种方式
创建一个pojo类
使用工具类把pojo转换成json字符串
把文档写入索引库二、使用ES客户端实现搜索
1、根据id搜索
QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
2、根据Term查询(关键词)
QueryBuilder queryBuilder = QueryBuilders.termQuery("title", "北方");
3、QueryString查询方式(带分析的查询)
QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("速度与激情").defaultField("title");
查询步骤:
1)创建一个Client对象
2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
3)使用client执行查询
4)得到查询的结果
5)取查询结果的总记录数
6)取查询结果列表
7)关闭client
4、分页的处理
在client对象执行查询之前,设置分页信息。
然后再执行查询
//执行查询
SearchResponse searchResponse = client.prepareSearch("index_hello")
.setTypes("article")
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
//每页显示的行数
.setSize(5)
.get();
分页需要设置两个值:from、size
from:起始的行号,从0开始。
size:每页显示的记录数
5、查询结果高亮显示
(1)高亮的配置
1)设置高亮显示的字段
2)设置高亮显示的前缀
3)设置高亮显示的后缀
(2)在client对象执行查询之前,设置高亮显示的信息
(3)遍历结果列表时可以从结果中取高亮结果三、SpringDataElasticSearch
1、工程搭建
1)创建一个java工程。
2)把相关jar包添加到工程中,如果maven工程就添加坐标。
3)创建一个spring的配置文件
1、配置elasticsearch:transport-client
2、配置elasticsearch:repositories,包扫描器,扫描dao
3、配置elasticsearchTemplate对象,就是一个bean
2、管理索引库
1、创建一个Entity类,其实就是一个JavaBean(pojo)映射到一个Document上
需要添加一些注解进行标注。
2、创建一个Dao,是一个接口,需要继承ElasticSearchRepository接口。
3、编写测试代码。
3、创建索引
直接使用ElasticsearchTemplate对象的createIndex方法创建索引,并配置映射关系。
4、添加与更新文档
1)创建一个Article对象
2)使用ArticleRepository对象向索引库中添加文档。
5、删除文档
直接使用ArticleRepository对象的deleteById方法直接删除。
6、查询索引库
直接使用ArticleRepository对象的查询方法
7、自定义查询方法
需要根据SpringDataES的命名规则来命名
如果不设置分页信息,默认带分页,每页显示10条数据。
如果设置分页信息,应该在方法中添加一个参数Pageable
Pageable pageable = PageRequest.of(0, 15);
注意:设置分页信息,默认是从0页开始。
可以对搜索的内容先分词然后再进行查询,每个词之间都是and的关系。
8、使用原生的查询条件查询
NativeSearchQuery对象。
使用方法:
1)创建一个NativeSearchQuery对象
设置查询条件,QueryBuilder对象
2)使用ElasticSearchTemplate对象执行查询
3)取查询结果
01、项目文件一览图
02、工程详细代码
01、Article.java
package com.itheima.es.entity;import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;@Document(indexName = "sdes_blog", type = "article")//文档,springdata-es
public class Article {@Id@Field(type = FieldType.Long, store = true)private long id;@Field(type = FieldType.text, store = true, analyzer = "ik_smart")private String title;@Field(type = FieldType.text, store = true, analyzer = "ik_smart")private String content;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}@Overridepublic String toString() {return "Article{" +"id=" + id +", title='" + title + '\'' +", content='" + content + '\'' +'}';}
}
02、ArticleRepository.java
package com.itheima.es.repositories;import com.itheima.es.entity.Article;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;//import java.awt.print.Pageable;
import java.util.List;public interface ArticleRepository extends ElasticsearchRepository<Article, Long> {//对Article进行操作,主键是LongList<Article> findByTitle(String title);List<Article> findByTitleOrContent(String title, String content);List<Article> findByTitleOrContent(String title, String content, Pageable pageable);//pageable设置分页信息
}
03、SpringDataElasticSearchTest.java
import com.itheima.es.entity.Article;
import com.itheima.es.repositories.ArticleRepository;
import jdk.nashorn.internal.runtime.ECMAException;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.List;
import java.util.Optional;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")//加载配置文件初始化spring容器public class SpringDataElasticSearchTest {@Autowiredprivate ArticleRepository articleRepository;//在运行中不会有啥问题!@Autowiredprivate ElasticsearchTemplate template;@Testpublic void createIndex() throws Exception {//创建索引并配置映射关系template.createIndex(Article.class);//配置映射关系//template.putMapping(Article.class);}@Testpublic void addDocument() throws Exception {for (int i = 11; i <= 20; i++) {//创建一个Article对象Article article = new Article();article.setId(i);article.setTitle("我的脑海每分每秒只为你一人沉醉~");//小黑子 我应该拿你怎样 我应该拿你怎样~~~article.setContent("最迷人让我神魂颠倒是你身上香水~");//哎嗨呦,你干嘛~~~ uh~ 所有人都在看着你~//把文档写入索引库articleRepository.save(article);}}@Testpublic void deleteDocumentById() throws Exception {//根据id删除文档信息articleRepository.deleteById(1l);//articleRepository.deleteAll();//全部删除}@Testpublic void findAll() throws Exception {Iterable<Article> articles = articleRepository.findAll();articles.forEach(a -> System.out.println(a));}@Testpublic void testFindById() throws Exception {Optional<Article> optional = articleRepository.findById(1l);Article article = optional.get();System.out.println(article);}@Testpublic void testFindByTitle() throws Exception {List<Article> list = articleRepository.findByTitle("爆炸and沉醉");list.stream().forEach(a -> System.out.println(a));}@Testpublic void testFindByTitleOrContent1() throws Exception {articleRepository.findByTitleOrContent("沉醉", "香水").forEach(a -> System.out.println(a));}@Testpublic void testFindByTitleOrContent2() throws Exception {//pageable分页查询Pageable pageable = PageRequest.of(1, 15);articleRepository.findByTitleOrContent("沉醉", "香水", pageable).forEach(a -> System.out.println(a));}@Testpublic void testNativeSearchQuery() throws Exception {//创建一个查询对象NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.queryStringQuery("脑海爆炸").defaultField("title")).withPageable(PageRequest.of(0, 15)).build();//执行查询List<Article> articleList = template.queryForList(query, Article.class);articleList.forEach(a -> System.out.println(a));}
}
bye~
相关文章:

ElasticSearch-学习笔记05【SpringDataElasticSearch】
Java后端-学习路线-笔记汇总表【黑马程序员】ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】ElasticSearch-学习笔记02【ElasticSearch索引库维护】ElasticSearch-学习笔记03【ElasticSearch集群】ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】Ela…...

【GlobalMapper精品教程】045:空间操作(2)——相交(Intersect)
GlobalMapper提供的空间分析(操作)的方法有:交集、并集、单并集、差异、对称差集、相交、重叠、接触、包含、等于、内部、分离等,本文主要讲述相交工具的使用。 文章目录 一、实验数据二、符号化设置三、相交运算四、结果展示五、心灵感悟一、实验数据 加载配套实验数据(…...

Android 一体机研发之修改系统设置————自动锁屏
Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 修改系统设置系列篇章马上开张了! 本章将为大家细节讲解自动锁屏。 自动锁屏功能,这个可以根据…...

七天实现一个go rpc框架
目录rpc协议目的关于RPC和框架服务端与消息编码确保接口的实现消息的序列化与反序列化通信过程服务端的实现main 函数支持并发与异步的客户端Call 的设计实现客户端服务注册(service register)通过反射实现 service集成到服务端超时处理创建连接超时Client.Call 超时服务端处理…...

EMQX Cloud Serverless 正式上线:三秒部署、按量计费的 MQTT Serverless 云服务
近日,全球领先的开源物联网数据基础设施软件供应商 EMQ 正式发布了 MQTT Serverless 云服务 —— EMQX Cloud Serverless 的 Beta 版本,开创性地采用弹性多租户技术,用户无需关心服务器基础设施和服务规格伸缩所需资源,仅用三秒即…...
快速排序 容易理解的版本
package huaweiod.排序算法;import java.util.Arrays;public class 快速排序 {public static void main(String[] args) {int[] arr {9,8,3,5,6,7,8,9};mysort(arr, 0, arr.length - 1); // myprint(arr," ");}private static void myprint(int[] arr, Strin…...
Linux体系结构
Linux体系结构一、引入概念二、内核三、管理1、内存管理2、进程管理3、进程调度控制进程对CPU的访问4、设备驱动程序和网络接口四、Linux Shell五、磁盘分区硬盘内的分区Linux下磁盘分区和目录的关系一、引入 操作系统的本质是什么? 是一种管理(协调)资源机制&…...

【汽车电子】什么是ADAS?
文章目录ADAS——先进驾驶辅助系统ADAS——商用车安全性能提升的利器总结ADAS——先进驾驶辅助系统 ADAS,全称Advanced Driver Assistance Systems ,“先进驾驶辅助系统”,adas是汽车上面的一种系统,中文名叫做高级驾驶辅助系统&…...

java: 错误: 不支持发行版本 5(快速解决办法)
目录 前言 一、出现报错 二、报错的原因 三、解决办法 四、解决成功 前言 在maven web项目上面要部署运行tomcat时候,会出现这个问题 一、出现报错 java: 错误: 不支持发行版本 5 二、报错的原因 (1)官方解释:这个错误…...
QT中pro文件常用qmake语法
变量 配置QT模块 QT core gui sql network QT - sql注释 # 开启注释 # DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated before Qt 6.0.0添加源文件 SOURCES \main.cpp \widget.cppSOURCES *.cpp SOURCES 1.cpp 2.cpp 3.cpp添加…...

Android 一体机研发之修改系统设置————声音
Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 修改系统设置系列篇章马上开张了! 本章将为大家细节讲解声音。 对于声音功能大家都不陌生,在多…...
挖掘长尾关键词的五大思路
本文重点介绍做SEO挖掘长尾词的五大思路:长尾词是搜索量不大,但是关键词的量非常庞大的词,那我们可以通过以下方法挖掘:1、目标型长尾搜索的关键词是直接包含了商业需求的,直接能跟我们的服务或产品对接的,…...

ccc-Brief Introduction of Deep Learning-李宏毅(6)
文章目录Three Steps for Deep LearningFully Connect Feedforward NetworkMatrix OperationOutput Layer as Multi-Class ClassifierExample ApplicationNeural NetworkGoodness of functionPick the best functionThree Steps for Deep Learning 与机器学习三步骤基本相同。 …...
【TVM 学习资料】用 Schedule 模板和 AutoTVM 优化算子
完整 TVM 中文文档,访问→TVM 中文站 作者:Lianmin Zheng,Chris Hoge 本教程将展示如何用 TVM 张量表达式(TE)语言编写 schedule 模板,并通过 AutoTVM 对模板进行搜索,从而找到最佳 schedule。…...

蓝牙Mesh学习笔记(一)
Mesh系统结构1 Mesh网络分层1.1 模型层(Model layer)1.2 基础模型层(Foundation Model layer)1.3 接入层(Access layer)1.4 上层传输层(Upper transport layer)1.5 下层传输层(Lower transport layer)1.6 网络层(Network layer)1.7 承载层(Bearer layer)1.8 BLE内核规范(BLE Co…...
【1234. 替换子串得到平衡字符串】
来源:力扣(LeetCode) 描述: 有一个只含有 Q, W, E, R 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。 给你一个这样的字符…...

独自开:提供创业机会、享受平台分红、推出新颖赚钱副业
💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 前言 独自开:一款聚焦软件定制开发,独立、自主、开放平台 独创分层标准化平台架构,满足系统不断生长的个性化需求多端一键部署前端业务交互与展…...

C++【二叉树进阶(二叉搜索树)】
文章目录前言1、二叉搜索树1-1、 二叉搜索树概念2、二叉搜索树操作2-1、树和节点的基本框架2-2、二叉搜索树的查找2-3、中序遍历2-4、二叉搜索树的插入2-5、二叉搜索树的删除3、二叉搜索树的模拟实现3-1、循环版本3-2、递归版本4、二叉搜索树的应用4-1、K模型4-2、KV模型4-3、K…...

【C++初阶】vector的使用
大家好我是沐曦希💕 文章目录一.vector介绍二、构造函数三、遍历1.[]2.迭代器3.范围for四、容量操作1.扩容机制五、增删查改六、迭代器失效问题一.vector介绍 vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。…...
OPenPCDet windows流程及其问题
首先的首先极其不推荐将OPenPCDet运行在Windows上,过程非常复杂,适配也不是很好,不推荐在windows下载并训练,本人做这个主要是方便再笔记本电脑上对实验结果进行整理,处理一些简单的推理评估等任务。如有必要请继续阅读: 以下是正文: 常规的安装流程不再赘述,请参考官方…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...