引入elasticsearch坐标
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.5.4</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>6.5.4</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.5.4</version>
</dependency>
</dependencies>
创建es客户端连接
package com.zhang.elasticsearch.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "elasticsearch")
@Configuration
@Component
public class ElasticsearchConfig {
private String host;
private int port;
private String scheme = "http";
public void setHost(String host) {
this.host = host;
}
public void setPort(int port) {
this.port = port;
}
public void setScheme(String scheme) {
this.scheme = scheme;
}
@Bean
public RestHighLevelClient Client() {
return new RestHighLevelClient(RestClient.builder(new HttpHost(
host, port, scheme)));
}
}
分词查询某个字段中值分布和数量
@Autowired
RestHighLevelClient Client;
@Test
public void test() throws IOException {
String filed = "字段名";
String indexName="索引名";
//创建查询请求,可以添加一些查询条件
SearchRequest search = new SearchRequest(indexName);
SearchResponse response = Client.search(search, RequestOptions.DEFAULT);
ParsedStringTerms aggregation = response.getAggregations().get(filed);
List<? extends Terms.Bucket> buckets = aggregation.getBuckets();
for (Terms.Bucket bucket : buckets) {
//字段中存在的值
Object key = bucket.getKey();
//该值出现的次数
long docCount = bucket.getDocCount();
}
}