Java使用elasticsearch基础API使用案例讲解

1.依赖

我用的是 springboot 2.2.5.RELEASE 版本,这里只贴出主要依赖:

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

2.配置+测试源码

这里根据elasticsearch服务端的地址进行配置:

@Configuration
public class ElasticSearchConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1", 9200, "http")
                ));
        return client;
    }
}

以下是详细的测试代码:

@SpringBootTest
class EsApiApplicationTests {

	@Autowired
	@Qualifier(value = "restHighLevelClient")
	private RestHighLevelClient client;

	// 1.创建索引
	@Test
	void createIndex() throws IOException {
		// 创建请求
		CreateIndexRequest request = new CreateIndexRequest("yz_index");
		// 执行请求,获取响应
		CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
		System.out.println("creatIndex--" + response);
	}

	// 2.获取索引,判断是否存在
	@Test
	void getIndex() throws IOException {
		// 创建请求
		GetIndexRequest request = new GetIndexRequest("yz_index");
		// 执行请求,获取响应
		boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
		System.out.println("getIndex--exists--" + exists);
	}

	// 3.删除索引
	@Test
	void deleteIndex() throws IOException {
		// 创建请求
		DeleteIndexRequest request = new DeleteIndexRequest("yz_index");
		// 执行请求
		AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
		System.out.println("deleteIndex--" + response);
	}

	// 4.添加文档
	@Test
	void addDocument() throws IOException {
		// 创建对象
		User user = new User("Java虚拟机", 30);
		// 创建索引,即获取索引
		IndexRequest indexRequest = new IndexRequest("yz_index");
		// 添加规则 /index/_doc/id
		indexRequest.id("1");
		indexRequest.timeout(TimeValue.timeValueSeconds(1));
		// 存入对象
		indexRequest.source(JSON.toJSONString(user), XContentType.JSON);
		// 发送请求
		IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
		System.out.println("addDocument--" + response);
	}

	// 5.获取文档是否存在
	@Test
	void getDocument() throws IOException {
		// 创建get请求
		GetRequest getRequest = new GetRequest("yz_index", "1");
		// 不获取返回的_source的上下文
		getRequest.fetchSourceContext(new FetchSourceContext(false));
		getRequest.storedFields("_none_");
		// 发送请求
		boolean exists = client.exists(getRequest, RequestOptions.DEFAULT);
		System.out.println("addDocument--" + exists);

		// 6.获取文档信息
		if (exists) {
			// 创建请求
			GetRequest getRequest1 = new GetRequest("yz_index", "1");
			// 发送请求
			GetResponse response = client.get(getRequest1, RequestOptions.DEFAULT);
			System.out.println("source--" + response.getSource());
			System.out.println("getDocument--" + response.getSourceAsString());
		}

		// 7.更新文档信息
		if (exists) {
			// 创建请求
			UpdateRequest updateRequest = new UpdateRequest("yz_index", "1");
			updateRequest.timeout("1s");
			// 修改内容
			User user = new User("小米", 10);
			updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
			UpdateResponse response = client.update(updateRequest, RequestOptions.DEFAULT);
			System.out.println("updateDocument--" + response.status());
		}

		// 8.删除文档信息
		if (exists) {
			// 创建请求
			DeleteRequest deleteRequest = new DeleteRequest("yz_index", "1");
			deleteRequest.timeout("1s");
			// 修改内容
			DeleteResponse response = client.delete(deleteRequest, RequestOptions.DEFAULT);
			System.out.println("deleteDocument--" + response.status());
		}
	}

	// 9.批量添加文档
	@Test
	void batchAddDocument() throws IOException {
		// 批量请求
		BulkRequest bulkRequest = new BulkRequest();
		bulkRequest.timeout("10s");
		// 创建对象
		ArrayList<User> userArrayList = new ArrayList<>();
		userArrayList.add(new User("小米1", 1));
		userArrayList.add(new User("小米2", 2));
		userArrayList.add(new User("小米3", 3));
		userArrayList.add(new User("小米4", 4));
		userArrayList.add(new User("小米5", 5));
		// 添加请求
		for (int i = 0; i < userArrayList.size(); i++) {
			bulkRequest.add(new IndexRequest("yz_index")
					.id("" + (i + 2))
					.source(JSON.toJSONString(userArrayList.get(i)), XContentType.JSON));
		}
		// 执行请求
		BulkResponse response = client.bulk(bulkRequest, RequestOptions.DEFAULT);
		System.out.println("batchAddDocument--" + response.status());
	}

	// 10.查询
	@Test
	void search() throws IOException {
		// 创建请求
		SearchRequest searchRequest = new SearchRequest("jd_index");
		// 构建搜索条件
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
		TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", "杜伽");// 精确查询
		searchSourceBuilder.query(termQueryBuilder);
		searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
		searchRequest.source(searchSourceBuilder);
		// 执行请求
		SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
		// 解析查询结果
		System.out.println("search--getHists--" + JSON.toJSONString(response.getHits()));
		for (SearchHit documentFields : response.getHits()) {
			System.out.println("search--getHist--" + documentFields.getSourceAsMap());
		}
	}
}

到此这篇关于Java使用elasticsearch基础API使用案例讲解的文章就介绍到这了,更多相关Java使用elasticsearch基础API内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 一篇文章带你入门Java封装

    目录 什么是封装 如何实现封装 代码展示 构造方法 注意点: 代码展示 总结 封装的优点 什么是封装 Java中的封装是将数据(变量)和作用于数据(方法)的代码作为一个单元包装在一起的机制. 在封装中,类的变量将从其他类隐藏,并且只能通过当前类的方法访问. 如何实现封装 可以分为两步: 第一步:将类的变量声明为private. 第二步:提供公共set和get方法来修改和获取变量的值. 代码展示 public class User { private String name; private in

  • 一篇文章带你了解Java容器,面板及四大布局管理器应用

    目录 什么是容器? 什么是面板? JPanel面板 JScrollPane面板 什么是布局管理器? 绝对布局管理器 流布局管理器 边界布局管理 网格布局管理器 容器.面板.布局管理器之间的关系 总结 什么是容器? 在Java的GUI界面设计中,关于容器的理解,从字面意思我们就可以认为它是存放控件的地方,而这个地方依托在窗体之上,常用的容器是container. 而关于container容器我们应该有这样的认识:Swing组件中的窗体通常是与容器相关联的,所以在一般情况下,建立完JFrame窗体后

  • Java实现SMS短信通发送手机验证码案例讲解

    注册网建短信通账号 链接:http://sms.webchinese.cn/ 设置短信签名 注意不要乱写别的公司等,会被视为诈骗信息 设置短信密钥,发送时代替密码 Java方式实现 导入依赖 commons-httpclient-3.1.jar 编写SmsUtil工具类 import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.ap

  • Java虚拟机类加载器之双亲委派机制模型案例

    1. 双亲委派模型是什么? 当某个类加载器需要加载某个.class字节码文件时,它首先把这个任务委托给它的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类. 2. 双亲委派模型的工作原理? 1.如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去执行: 2.如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器:(每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶

  • Java拦截器Interceptor和过滤器Filte的执行顺序和区别

    目录 1.实现原理不同 2.使用范围不同 3.触发时机不同 4.拦截的请求范围不同 5.注入Bean情况不同 6.控制执行顺序不同 1.实现原理不同 过滤器和拦截器 底层实现方式大不相同,过滤器 是基于函数回调的,拦截器 则是基于Java的反射机制(动态代理)实现的. 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 4.拦截器可以访问

  • 一篇文章带你入门Java继承

    目录 Java中继承 什么是继承: 为什么要用继承: 学习总结: 继承关键字:extends 总结 Java中继承 什么是继承: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 为什么要用继承: 可以去掉重复代码,方便后期维护 举个列子,大家应该都玩过英雄联盟,每个英雄都是一个类,如果说不用继承的话每次都要重复定义每个英雄的成员属性,如下图我举了一个MF,一个EZ的列子 public class MissFortu

  • Java使用elasticsearch基础API使用案例讲解

    1.依赖 我用的是 springboot 2.2.5.RELEASE 版本,这里只贴出主要依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> 2.配置+测试源码 这里根据elasticsearch服务端的地址进行

  • Java之Jackson的基本使用案例讲解

    Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架.Jackson 社 区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson 是最流行的 json 解析器之一 . Spring MVC 的默认 json 解析器便是 Jackson. Jackson 优点很多. Jackson 所依赖的 jar 包较少 ,简单易用.与其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比较快

  • Java插件扩展机制之SPI案例讲解

    目录 什么是SPI 与 接口类-实现类 提供的RPC 方式有什么区别? 假设我们需要实现RPC,是怎么做的? 那RPC究竟跟SPI什么关系? SPI的应用场景 怎么实现一个SPI? 中间件是怎么实现SPI的? Apollo-Client中的实现 JDBC中的实现 什么是SPI SPI ,全称为 Service Provider Interface,是一种服务发现机制.其为框架提供了一个对外可扩展的能力. 与 接口类-实现类 提供的RPC 方式有什么区别? 传统的接口类实现形式为如下 public

  • Java之SpringBoot集成ActiveMQ消息中间件案例讲解

    ActiveMQ是Apache提供的开源组件,是基于JMS标准的实现组件.下面将利用SpringBoot整合ActiveMQ组件,实现队列消息的发送与接收. 第一步:引入依赖 第二步:修改application.yml文件,进行ActiveMQ的配置 第三步:定义消息消费监听类 第四步:定义消息生产者业务接口 第五步: 定义消息业务实现类 第六步:定义JMS消息发送配置类   第七步:测试发送消息 查看结果: 本文采用ActiveMQ实现了消息的发送与接收处理.每当有消息接收到时,都会自动执行M

  • Java之字节码以及优势案例讲解

    一.Java编译器 Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器,.这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口.编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码来将虚拟机代码转换为特定的系统机器码执行.在Java中,这种提供虚拟机理解的代码叫做字节码(即扩展名为 .class的文件),它不面向任何特定的处理器,仅仅只面向虚拟机. 1.利用记事本写一段Java代码 2.将记事本命名为 hello.java 3.cmd+r

  • Java之IO流面试题案例讲解

    一.Java中IO流分为几种? 按照流的流向分,可以分为输入流和输出流: 按照操作单元分,可以分为字节流和字符流(字节流可以读写任何单位的数据,字符流只可以读写txt数据): 按照流的角色分,可以分为节点流和处理流: 二.IO中flush()和close()的区别 close()方法具备刷新功能,在关闭流之前就会先刷新缓冲区,将缓冲区的字节全部刷新到文件上,在关闭流.(close()方法包含一次flush()方法) flush()方法可以刷新,并且刷新之后可以继续写,而close()方法刷新之后

  • Java数据结构 递归之迷宫回溯案例讲解

    问题介绍: 用二维数组表示一个迷宫,设置迷宫起点和终点,输出迷宫中的一条通路 实现思路: 二维数组表示迷宫: 0表示路且未走过.1表示墙.2表示通路,3表示已经走过但走不通 设置寻路方法setWay,传入地图和坐标参数 默认方向策略:下.右.上.左 假定传入的店没有走过且可以走通,将其值置为2,然后向下寻路,也就是将坐标 (i + 1, j) 传入寻路方法中 进行递归寻路,向下移动后,再次按照方向策略进行寻路,即再向下寻路,直到遇到死路,即下右左均走不通(因为将走过的路置为2,故向上也走不通,即

  • Java之api网关断言及过滤器案例讲解

    目录 一.什么是api网关? 二.常见的api网关 三.使用步骤 1.Spring Cloud Gateway 2.优缺点 3.传统的过滤器 4.使用gateway 4.1module 4.2添加pom依赖 4.3yaml配置 4.4主程序开启注解@EnableDiscoveryClient 四.执行流程 五.断言 5.1: 自定义断言 5.2: 过滤器 一.什么是api网关? 所谓的API网关,就是指后台系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一 路由服务,一些与业务本身功能

  • java操作elasticsearch的案例解析

    这篇文章主要介绍了java操作elasticsearch的案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 到目前为止,我们一直都是使用RESTful风格的 API操作elasticsearch服务,但是通过我们之前的学习知道,elasticsearch提供了很多语言的客户端用于操作elasticsearch服务,例如:java.python..net.JavaScript.PHP等.而我们此次就学习如何使用java语言来操作elasti

  • Java之Springcloud Gateway内置路由案例讲解

    Spring Cloud Gateway路由匹配是Spring WebFlux基础功能的一部分,在Spring Cloud Gateway中内置了很多路由断言工厂类.不同的断言工厂类针对HTTP请求的不同属性.多个断言工厂类可以使用逻辑"and"进行组合使用. 4.1 After Route Predicate Factory        这个Predicate工厂的实现类是AfterRoutePredicateFactory,使用一个时间参数,如果当前请求的时间在配置的赶时间之后,

随机推荐