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;@Beanpublic 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 {@Autowiredprivate RestHighLevelClient restHighLevelClient;@org.junit.Testpublic void test() throws IOException {CreateIndexRequest request = new CreateIndexRequest("message");CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);System.out.println(response.isAcknowledged());}@org.junit.Testpublic 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.Testpublic void testDeleteMessageIndex() throws IOException {// 1.创建Request对象DeleteIndexRequest request = new DeleteIndexRequest("r_rideinfo");// 2.发送请求restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);}}
已经连接成功,可以使用。