elasticsearchConfiguration.java 方法实现
package com.tpyzq.funnel.config;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import java.net.InetAddress;
@Configuration
@PropertySource("classpath:my.properties")
public class ElasticsearchConfiguration implements FactoryBean<TransportClient>, InitializingBean, DisposableBean {
@Value("${spring.data.elasticsearch.cluster-nodes}")
private String clusterNodes;
@Value("${spring.data.elasticsearch.cluster-name}")
private String clusterName;
private TransportClient client;
@Override
public void destroy() throws Exception {
try {
System.out.println("Closing elasticSearch client");
if (client != null) {
client.close();
}
} catch (final Exception e) {
System.out.println("Error closing ElasticSearch client"+e);
}
}
@Override
public TransportClient getObject() throws Exception {
return client;
}
@Override
public Class<TransportClient> getObjectType() {
return TransportClient.class;
}
@Override
public boolean isSingleton() {
return false;
}
@Override
public void afterPropertiesSet() throws Exception {
buildClient();
}
protected void buildClient() {
try {
PreBuiltTransportClient preBuiltTransportClient = new PreBuiltTransportClient(settings());
System.out.println("clusterNodes:" + clusterNodes);
if (!"".equals(clusterNodes)) {
for (String nodes : clusterNodes.split(",")) {
String InetSocket[] = nodes.split(":");
String Address = InetSocket[0];
Integer port = Integer.valueOf(InetSocket[1]);
preBuiltTransportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Address), port));
System.out.println(Address+" " +port);
System.out.println("连接成功");
}
client = preBuiltTransportClient;
System.out.println("client " + client.toString());
}
} catch (Exception e) {
System.out.println("连接错误"+e);
}
}
private Settings settings() {
Settings settings = Settings.builder()
.put("client.transport.sniff", true)
.put("cluster.name", clusterName).build();
client = new PreBuiltTransportClient(settings);
System.out.println("clusterName:" + clusterName);
return settings;
}
}
my.properties 配置文件
spring.data.elasticsearch.cluster-nodes=10.42.221.43:9300,10.42.221.44:9300,10.42.221.45:9300,10.42.221.46:9300
spring.data.elasticsearch.cluster-name=datatom
连接
TransportClient client = null;
try {
client = elasticsearchConfiguration.getObject();
} catch (Exception e) {
e.printStackTrace();
}
条件
List<QueryBuilder> listmust= new ArrayList<>();
QueryBuilder appvernamequery = QueryBuilders.termQuery("age",“11”);
RangeQueryBuilder configtimequery = QueryBuilders.rangeQuery("configtime").gt(starttime).lt(endtime);
QueryBuilder pagequerys = QueryBuilders.matchPhraseQuery("pages", "AAA#BBB");
BoolQueryBuilder builder= QueryBuilders.boolQuery();
builder.must();
builder.should();
查询
POST /funnel_index/_search?pretty
{
"query": {
"bool": {
"must": [
{"term": {
"appvername": "2.2.1(20190801)"
}},
{"term": {
"appos": "A"
}}
]
}
},
"size": 20
}
SearchResponse response = client.prepareSearch("funnel_index")
.setTypes("funnel_type")
.setQuery(builder)
.get();
System.out.println("条数:"+response.getHits().getTotalHits()+" ");
Iterator<SearchHit> iterators = responses.getHits().iterator();
List<Map<String,Object>> listMap = new ArrayList<>();
while (iterators.hasNext()) {
SearchHit next = iterators.next();
Map<String, Object> map = next.getSource();
listMap.add(map);
}
去重
//aggs ,cardinality,field为系统关键字
//uid_nextpage 为自己取的名字,可以随便取
//nextpage 为字段名称
POST /funnel_substep_index/_search?pretty
{
"query": {
"bool": {
"must": [
{"term": {
"page_id": "AAA0771"
}}
]
}
},
"aggs": {
"uid_nextpage": {
"cardinality": {
"field": "nextpage"
}
}
}
}
AggregationBuilder aggregations =
AggregationBuilders
.terms("uid_nextpage").field("page_id");
QueryBuilder pagequeryss = QueryBuilders.matchPhraseQuery("nextpage", page_id);
BoolQueryBuilder builder= QueryBuilders.boolQuery();
builder.must(pagequeryss);
SearchResponse responses = client.prepareSearch("funnel_index")
.setTypes("funnel_type")
.setQuery(builder)
.addAggregation(aggregations)
.get();
Terms aggs = responses.getAggregations().get("uid_nextpage");
for (Terms.Bucket entry : aggs.getBuckets()) {
String key = String.valueOf(entry.getKey()) ;
long docCount = entry.getDocCount();
System.out.println("key:"+ key +" doc_count:"+ docCount);
}