spring boot 集成es使用
pom添加依赖
我的es是7.17.3版本,spring boot是2.2.2.RELEASE版本,仅供参考:
<!-- Elasticsearch RestHighLevelClient --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.17.3</version> <exclusions> <exclusion> <artifactId>elasticsearch-rest-client</artifactId> <groupId>org.elasticsearch.client</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>7.17.3</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.17.3</version> </dependency>
本地构建es服务器:
想用连接es,需要有一个es服务器,我同样安装了kibana,用的是docker-compose的方式,docker-compose.yaml文件内容:
version: '3.7'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3
ports:
- 9200:9200
volumes:
- ./es/esdata:/usr/share/elasticsearch/data
- ./es/logs:/usr/share/elasticsearch/logs
- ./es/plugins:/usr/share/elasticsearch/plugins
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- ES_JAVA_OPTS=-Xms1g -Xmx10g
deploy:
replicas: 1
restart_policy:
condition: on-failure
resources:
limits:
cpus: '4'
memory: 2G
networks:
- _testkibana:
image: kibana:7.17.3
ports:
- 5601:5601
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
networks:
- _test
networks:
_network:
external: true
driver: overlay
name: test
项目代码配置es的配置文件
连接es的ip和端口
package com.susu.es; import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ElasticsearchConfig { @Value("${elasticsearch.host}") private String host; @Value("${elasticsearch.port}") private String port; @Bean public RestHighLevelClient restHighLevelClient() { return new RestHighLevelClient(RestClient.builder(HttpHost.create(host+":"+port)).setRequestConfigCallback(requestConfigBuilder -> { return requestConfigBuilder.setConnectTimeout(5000 * 1000) // 连接超时(默认为1秒) .setSocketTimeout(6000 * 1000);// 套接字超时(默认为30秒) })); } }
编写测试类进行连接:
package com.susu.es;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.models.auth.In;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.*;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.xcontent.XContentBuilder;
import org.elasticsearch.xcontent.XContentFactory;
import org.elasticsearch.xcontent.XContentType;
import org.json.JSONObject;
import org.junit.jupiter.api.Order;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static cn.hutool.http.webservice.SoapUtil.createClient;
import static cn.hutool.json.XMLTokener.entity;
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class Test {
@Autowired
private RestHighLevelClient restHighLevelClient;
@org.junit.Test
public void test() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("message");
CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
System.out.println(response.isAcknowledged());
}
@org.junit.Test
public void testExistsMessageIndex() throws IOException {
// 1.创建Request对象
GetIndexRequest request = new GetIndexRequest("message");
// 2.发送请求
boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
// 3.输出
System.err.println(exists ? "索引库已经存在!" : "索引库不存在!");
}
@org.junit.Test
public void testDeleteMessageIndex() throws IOException {
// 1.创建Request对象
DeleteIndexRequest request = new DeleteIndexRequest("r_rideinfo");
// 2.发送请求
restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
}
}
已经连接成功,可以使用。