前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >StringBoot集成Elasticsearch

StringBoot集成Elasticsearch

作者头像
暴躁的程序猿
发布于 2022-03-23 12:11:32
发布于 2022-03-23 12:11:32
41800
代码可运行
举报
运行总次数:0
代码可运行

官方文档 此处

本文使用Elasticsearch版本为7.8.0

创建一个项目 勾选es依赖

编译版本一定是8以上

默认集成的版本 跟我们本地安装的版本不一样

自己指定跟自己es版本匹配即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<properties>
		<java.version>1.8</java.version>
		<!--自己定义es版本-->
        <elasticsearch.version>7.8.0</elasticsearch.version>
	</properties>

本文的所有依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	<properties>
		<java.version>1.8</java.version>
		<!--自己定义es版本-->
        <elasticsearch.version>7.8.0</elasticsearch.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<!--json-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.76</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

编写一个配置类创建连接es的客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class ElasticSearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        //配置客户端连接es信息
                        new HttpHost("localhost", 9200, "http")
                ));
        return client;
    }

}

测试索引操作

测试创建索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootTest
class FeiEsApiApplicationTests {

	@Autowired
	private RestHighLevelClient restHighLevelClient;

	/**
	 * 测试索引的创建
	 */
	@SneakyThrows
	@Test
	void testCreate(){
		//1.创建索引请求
		CreateIndexRequest createIndexRequest = new CreateIndexRequest("fei_index");
        //2.客户端执行创建请求
		CreateIndexResponse response = restHighLevelClient
				.indices()
				.create(createIndexRequest, RequestOptions.DEFAULT);
		System.out.println(response);
	}


}

获取索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 测试获取索引
	 */
	@SneakyThrows
	@Test
	void testGetIndex()  {
		GetIndexRequest request = new GetIndexRequest("fei_index");
		boolean exists = restHighLevelClient
				.indices()
				//判断索引是否存在
				.exists(request, RequestOptions.DEFAULT);
		System.out.println(exists);
	}

删除索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SneakyThrows
	@Test
	void testDel(){
		//创建删除索引请求
		DeleteIndexRequest request = new DeleteIndexRequest("fei_index");
		//执行删除
		AcknowledgedResponse response = restHighLevelClient
				.indices()
				.delete(request, RequestOptions.DEFAULT);
		System.out.println(request);
	}

文档操作

添加文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 测试添加文档
	 */
	@SneakyThrows
	@Test
	void testAddDocument(){
    	//创建对象
		User user = new User("飞飞",24);
		//创建请求
		IndexRequest request = new IndexRequest("fei_index");
        //设置规则
		request.id("1");
		request.timeout(TimeValue.timeValueSeconds(1));
		//将我们的数据放入请求  Json
		request.source(JSON.toJSONString(user), XContentType.JSON);
	    //客户端发送请求  获取响应结果
		IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
		System.out.println(response.toString());
	}

获取文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 获取文档  判断是否存在
	 */
	@SneakyThrows
	@Test
	void testIsGet(){
		GetRequest request = new GetRequest("fei_index","1");
		//不获取返回的_source 上下文了
		request.fetchSourceContext(new FetchSourceContext(false));
		request.storedFields("_none_");
        //判断是否存在
		boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);
		System.out.println(exists);
	}

获取文档内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 获取文档信息
	 */
	@SneakyThrows
	@Test
	void testGetDocument(){
		 GetRequest request = new GetRequest("fei_index", "1");
		 //获取文档信息
		 GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
		 //打印文档内容
		 System.out.println(response.getSourceAsString());

	}

更新文档信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//更新文档信息
	@Test
	@SneakyThrows
	void testGetUpd(){
		UpdateRequest request = new UpdateRequest("fei_index","1");
		//设置超时时间
		request.timeout("1s");
		User user = new User("阿飞", 18);
		//转成json数据    数据的类型
		request.doc(JSON.toJSONString(user),XContentType.JSON);
		//执行更新打印结果
		UpdateResponse update = restHighLevelClient.update(request, RequestOptions.DEFAULT);
		System.out.println(update);
	}

删除文档信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 删除文档信息
	 */
	@SneakyThrows
	@Test
	void testDelDoc(){
		//创建删除请求  删除 fei_index索引的id为二的文档
		DeleteRequest request = new DeleteRequest("fei_index","2");
		DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
		System.out.println(delete);
	}

批量操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 特殊的,   批量插入数据
	 */
	@SneakyThrows
	@Test
	void testBulkReq(){
		//创建批量请求
		BulkRequest request = new BulkRequest();
		//设置超时时间
		request.timeout("5s");
		ArrayList<User> list = new ArrayList<>();
		list.add(new User("张三",20));
		list.add(new User("张四",21));
		list.add(new User("张五",22));
		list.add(new User("张六",23));
		list.add(new User("张七",24));

		for (int i = 0; i < list.size(); i++) {
			//插入和删除写对应的请求就可以了
			 request.add(new IndexRequest("fei_index")
			 .id(""+(i+1))
					 .source(JSON.toJSONString(list.get(i)),XContentType.JSON));
		}
		BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
	}

查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 查询
	 */
	@SneakyThrows
	@Test
	void testSearch(){
		SearchRequest request = new SearchRequest("fei_index");
		//构建搜索的条件      term精准匹配
		SearchSourceBuilder builder = new SearchSourceBuilder();
		TermQueryBuilder query = QueryBuilders.termQuery("name", "张三");
		builder.query(query);
		//分页
		builder.from(0);
		builder.size(3);
		builder.timeout(new TimeValue(60, TimeUnit.SECONDS));
	    //条件放入请求
		request.source(builder);
	    //执行
		SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);
		//打印结果
		System.out.println(JSON.toJSONString(search.getHits()));
	}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Java单例模式的写法及优缺点
优点:实现简单,不存在多线程问题,直接声明一个私有对象,然后对外提供一个获取对象的方法。
老马的编程之旅
2022/06/22
8140
Java设计模式之(一)------单例模式
IT可乐
2018/01/04
8940
Java设计模式之(一)------单例模式
一文搞懂单例模式
单例模式(Singleton Pattern)是Java中最简单的设计模式之一,属于创建型模式。它提供了一种创建对象的最佳方式。
全菜工程师小辉
2020/12/22
6770
设计模式系列 - 单例模式
我不知道大家工作或者面试时候遇到过单例模式没,面试的话我记得我当时在17年第一次实习的时候,就遇到了单例模式,面试官是我后来的leader,当时就让我手写单例,我记得我就写出了饿汉式,懒汉式,但是并没说出懒汉和饿汉的区别,当时他给我一通解释我才知道了其中的奥秘。
敖丙
2021/03/09
5030
设计模式系列 - 单例模式
挑战一文搞懂带你搞懂单例模式,面试手撕双重检查锁定单例模式不害怕!
最近在刷牛客的时候,发现现在的面试官出笔试题都已经不局限在Hot100,大把大把的同学在面试的时候被考到了与设计模式相关的笔试题。
程序员牛肉
2024/11/21
3810
挑战一文搞懂带你搞懂单例模式,面试手撕双重检查锁定单例模式不害怕!
Java单例模式的不同写法(懒汉式、饿汉式、双检锁、静态内部类、枚举)[通俗易懂]
Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。
全栈程序员站长
2022/09/15
3.4K0
java设计模式(四)--单例模式
 Singleton最熟悉不过了,下面学习单例模式。转载:http://zz563143188.iteye.com/blog/1847029 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处: 1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。 2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系
Ryan-Miao
2018/03/13
7960
灵活多变的单例模式
在软件工程领域,设计模式是一套通用、可复用的解决方案,用于解决在软件设计过程中产生的通用问题。它不是一个可以直接转成源码的设计,是一套开发人员在软件设计过程中应当遵循的规范。也就是说没有设计模式,软件依旧可以开发,只是后期维护可能变得不那么轻松。设计模式就是为了简化你的维护成本提升性能而设计的,不同的设计模式适用场景各异,具体的结合实际场景对待。
啃饼思录
2021/11/02
3300
23种设计模式之单例模式进阶
前一篇推文里面我们初步介绍了一下23种设计模式,并且讲解了其中的单例模式的两种情况,今天我们再来讲一讲另外几种单例模式的情况,因为我们都知道懒汉式和饿汉式都有各自的优点和各自的缺点,所以我们今天来讲讲比这两种模式更好的一些方法!
Python进击者
2019/09/17
3300
23种设计模式之单例模式进阶
万字总结之单例模式
这里不得不先吐槽下,尤其是接手原来的老项目,负责人已经溜了,你不得不上。哎,要是代码写的优雅,注释明了,那就是祖上烧高香了,得此优秀项目。那要是写的一团糟,代码耦合性强,牵一发而动全身,注释根本没有,变量名方法名不规范,甚至用拼音的,那真的分分钟想打人的心都有了。那读代码根本就靠猜好吗,完全考验你和对方的心有灵犀程度。哎,算了,小仙女不生气,要温柔(微笑脸)。
陈琛
2020/06/12
3730
万字总结之单例模式
Java之单例模式
要点: 饿汉式单例模式代码中,static变量会在类装载时初始化,此时也不会涉及多个线程对象访问该对象的问题。虚拟机保证只会装载一次该类,肯定不会发生并发访问的问题。因此,可以省略synchronized关键字。 问题:如果只是加载本类,而不是要调用getInstance(),甚至永远没有调用,则会造成资源浪费!
全栈程序员站长
2022/06/30
2240
搞懂设计模式-单例模式
单例模式在网上已经是被写烂的一种设计模式了,笔者也看了不少的有关单例模式的文章,但是在实际生产中使用的并不是很多,如果一个知识点,你看过100遍,但是一次也没实践过,那么它终究不是属于你的。因此我借助这篇文章来复习下设计模式中的单例模式。
全栈程序员站长
2022/06/29
6730
单例模式 Java 简介 学习笔记 及多种实现方式
在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致性的结果。
大鹅
2020/06/24
9910
单例模式 实现
上面那种直接在方法上加锁的方式其实不够好,因为在方法上加了内置锁在多线程环境下性能会比较低下,所以我们可以将锁的范围缩小
Krry
2018/12/09
1.2K0
浅析单例模式的8中写法
说明这种写法看似在线程安全的基础上减少了锁的代码量,其实是达不到“永远”单例的目的的。
行百里er
2020/12/02
4400
浅析单例模式的8中写法
Java版的7种单例模式
今天看到某一篇文章的一句话 单例DCL 前面加 V 。就这句话让我把 单例模式 又仔细看了一遍。
静默加载
2020/05/29
4390
Java单例模式
  单例模式应该是我们接触的众多设计模式中的第一个,但是对于单例模式的一些细节地方对于初学者来说并不是很清楚,所以本文就来整理下单例模式。
用户4919348
2019/04/02
1.1K0
Java单例模式
史上最全讲解单例模式以及分析源码中的应用
1、单例模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。比如Hibernate 的SessionFactory,它充当数据存储源的代理,并负责创建Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory 就够,这是就会使用到单例模式。2、单例模式的种类饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步
小熊学Java
2022/09/04
4080
java实现单例模式
public class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton newInstance(){ return instance; } }
大数据流动
2019/08/08
5290
单例模式的几种实现方式#java,简单易懂
单例模式(Singleton Pattern)是一种设计模式,这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 这里介绍几种实现的方式。
梦飞
2022/06/23
3020
相关推荐
Java单例模式的写法及优缺点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档