Java中ElasticSearch的使用

这篇博客详细介绍了如何使用Java与Elasticsearch进行交互,包括导入必要的依赖、配置Elasticsearch客户端、创建和删除索引、增删改查操作、批量处理以及搜索查询。示例代码涵盖了各种常用操作,是Java开发者学习Elasticsearch的好资源。
摘要由CSDN通过智能技术生成

今天整理一下ElasticSearch的Java使用

导入相关依赖

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

查看是否和自己使用的ElasticSearch版本冲突,确保和自己安装的ElasticSearch版本一致

<properties>
     <elasticsearch.version>7.6.1</elasticsearch.version>
</properties>

添加配置类

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

更据自己的需求选择是否创建实体类
一下是一些比较常用的方法测试


	//测试索引的创建 Request
	@Test
	void testCreateIndex() throws IOException {
		//创建索引请求
		CreateIndexRequest fj_index = new CreateIndexRequest("fj");
		//2.执行创建请求
		CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(fj_index, RequestOptions.DEFAULT);
		System.out.println(createIndexResponse);
	}

	//测试获取索引
	@Test
	void testExistIndex() throws IOException {
		GetIndexRequest fj_index = new GetIndexRequest("fj_index");
		boolean exists = restHighLevelClient.indices().exists(fj_index, RequestOptions.DEFAULT);
		System.out.println(exists);
	}

	//测试删除索引
	@Test
	void testDeleteIndex() throws IOException {
		DeleteIndexRequest request = new DeleteIndexRequest("fj_index");
		AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
		System.out.println(delete.isAcknowledged());
	}

	@Test
	void testAdDocument() throws IOException {
		User user = new User("富景", 22);
		IndexRequest request = new IndexRequest("fj");
		//规则 put /fj/_doc/1
		request.id("1");
		request.timeout(TimeValue.timeValueSeconds(1));
		request.timeout("1s");
		//将我们的数据放入请求 json
		request.source(JSON.toJSONString(user), XContentType.JSON);
		//客户端发送请求
		IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);
		System.out.println(index.toString());

	}

	@Test
		//获取文档,判断是否存在
	void testIsExists() throws IOException {
		GetRequest getRequest = new GetRequest("fj", "1");
		//不获取返回的_source的上下文
		getRequest.fetchSourceContext(new FetchSourceContext(false));
		getRequest.storedFields("_none_");
		boolean exists = restHighLevelClient.exists(getRequest, RequestOptions.DEFAULT);
		System.out.println(exists);
	}

	@Test
		//获取文档
	void testGetDocument() throws IOException {
		GetRequest getRequest = new GetRequest("fj", "1");
		GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
		System.out.println(getResponse.getSourceAsString());
		//返回的全部信息和命令一样
		System.out.println(getResponse);
	}
	//更新文档
	void testUpdateSCS() throws IOException {
		UpdateRequest updateRequest = new UpdateRequest("fj", "1");
		updateRequest.timeout("1s");
		User user = new User("富景666", 18);
		updateRequest.doc(JSON.toJSONString(user), XContentType.JSON);
		UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
		System.out.println(update.status());

	}

	@Test
		//删除文档
	void testDeleteResponse() throws IOException {
		DeleteRequest deleteRequest = new DeleteRequest("fj", "1");
		deleteRequest.timeout("1s");
		DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
		System.out.println(delete.status());
	}

	//批量插入数据
	@Test
	void testBulkRequest() throws IOException {
		BulkRequest bulkRequest = new BulkRequest();
		bulkRequest.timeout("10s");
		ArrayList<User> users = new ArrayList<>();
		users.add(new User("fj1", 3));
		users.add(new User("fj2", 3));
		users.add(new User("fj5", 3));
		users.add(new User("fj6", 3));
		users.add(new User("fj7", 3));
		//批处理请求
		for (int i = 0; i < users.size(); i++) {
			bulkRequest.add(new IndexRequest("fj")
					.id("" + (i + 1))
					.source(JSON.toJSONString(users.get(i)), XContentType.JSON)
			);
		}
		BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
		System.out.println(bulk.hasFailures());
	}

	//查询
	@Test
	void testSearch() throws IOException {
		SearchRequest searchRequest = new SearchRequest("fj");
		//构建搜索条件
		SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
		sourceBuilder.highlighter();
		//查询条件 QueryBuilders工具类实现
		//termQuery精确匹配
		//matchAllQuery匹配所有
		TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("id", "26");
//		MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
		sourceBuilder.query(termQueryBuilder);
//		sourceBuilder.from(0);
//		sourceBuilder.size(1);
		sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
		searchRequest.source(sourceBuilder);
		SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
		for (SearchHit hit : search.getHits().getHits()) {
			System.out.println(hit.getId());
		}

	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值