Springboot 集成 ElasticSearch

引入依赖

<!--ES-->
	  <dependency>
		  <groupId>org.elasticsearch</groupId>
		  <artifactId>elasticsearch</artifactId>
		  <version>7.4.1</version>
	  </dependency>
	  <dependency>
		  <groupId>org.elasticsearch.client</groupId>
		  <artifactId>elasticsearch-rest-high-level-client</artifactId>
		  <version>7.4.1</version>
	  </dependency>
	  <dependency>
		  <groupId>org.elasticsearch.client</groupId>
		  <artifactId>elasticsearch-rest-client</artifactId>
		  <version>7.4.1</version>
	  </dependency>

配置

  • yml配置
#ES 配置
elasticsearch.active=true
elasticsearch.schema=http
elasticsearch.address=192.168.1.110:9200,192.168.1.111:9200
elasticsearch.connectTimeout=5000
elasticsearch.socketTimeout=5000
elasticsearch.connectRequestTimeout=5000
elasticsearch.maxConnectNum=100
elasticsearch.maxConnectPerRoute=100
  • 配置类
@Configuration
public class EsConfig {
    @Value("${elasticsearch.active}")
    private boolean active;
    @Value("${elasticsearch.schema}")
    private String schema;
    @Value("${elasticsearch.address}")
    private String address;
    @Value("${elasticsearch.connectTimeout}")
    private int connectTimeout;
    @Value("${elasticsearch.socketTimeout}")
    private int socketTimeout;
    @Value("${elasticsearch.connectRequestTimeout}")
    private int connectRequestTimeout;
    @Value("${elasticsearch.maxConnectNum}")
    private int maxConnectNum;
    @Value("${elasticsearch.maxConnectPerRoute}")
    private int maxConnectPerRoute;

    @Bean(name="restHighLevelClient")
    public RestHighLevelClient restHighLevelClient(){
        if(!active)
            return null;
        //拆分地址
        List<HttpHost>hostList=new ArrayList<>();
        String[]hostArr=address.split(",");
        for (String addr : hostArr) {
            String host=addr.split(":")[0];
            String port=addr.split(":")[1];
            hostList.add(new HttpHost(host,Integer.parseInt(port),schema));
        }
        //转为HttpHost数组
        HttpHost[]httpHost=hostList.toArray(new HttpHost[]{});
        //构建连接对象
        RestClientBuilder builder=RestClient.builder(httpHost);
        //异步连接延时配置
        builder.setRequestConfigCallback(requestConfigBuilder->{
           requestConfigBuilder.setConnectTimeout(connectTimeout);
           requestConfigBuilder.setSocketTimeout(socketTimeout);
           requestConfigBuilder.setConnectionRequestTimeout(connectRequestTimeout);
            return requestConfigBuilder;
        });

        //异步连接数量配置
        builder.setHttpClientConfigCallback(httpClientBuilder->{
           httpClientBuilder.setMaxConnTotal(maxConnectNum);
           httpClientBuilder.setMaxConnPerRoute(maxConnectPerRoute);
            return httpClientBuilder;
        });

        return new RestHighLevelClient(builder);
    }

}

测试

  • 方式一
	String index = "test";
	SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
	searchSourceBuilder.query(QueryBuilders.matchAllQuery());
	//查找test1最新的一条记录
	searchSourceBuilder.sort(SortBuilders.fieldSort("test1").order(SortOrder.DESC));
	searchSourceBuilder.size(1);
	SearchRequest request = new SearchRequest(index);
	request.source(searchSourceBuilder);
  • 方式二
//获取查询结果
	SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
	if (RestStatus.OK.equals(searchResponse.status()) && searchResponse.getHits().getTotalHits().value > 0) {
		SearchHits hit = searchResponse.getHits();
		for (SearchHit searchHit : hit.getHits()) {
			JSONObject jsonObj = JSON.parseObject(searchHit.getSourceAsString());
			bjsj = jsonObj.getDate("test1");
			indexStatus.setDate(bjsj);
		}
	}
上一篇 下一篇
评论
说点什么吧?

发表评论

取消回复