Elasticsearch java查询

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;
//@Component
/**
 * @Author: Baimh
 * @Date: 2019/9/10 14:22
 */

@Configuration
@PropertySource("classpath:my.properties")
public class ElasticsearchConfiguration implements FactoryBean<TransportClient>, InitializingBean, DisposableBean {
//    Logger logger = Logger.getLogger(ElasticsearchConfiguration.class);
    @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 {//销毁client
        try {
//            logger.info("Closing elasticSearch client");
            System.out.println("Closing elasticSearch client");
            if (client != null) {
                client.close();
            }
        } catch (final Exception e) {
//            logger.error("Error closing ElasticSearch client: ", 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();
    }
    //创建client
    protected void buildClient() {

//        client = new PreBuiltTransportClient(Settings.EMPTY)
//                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host),port));
//        System.out.println("client: "+ client);




        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) {
//            logger.error(e.getMessage());
            System.out.println("连接错误"+e);
        }
    }
    //设置集群名称seetings
    private Settings settings() {


        Settings settings = Settings.builder()
                .put("client.transport.sniff", true)
                // 这里指定集群名称,我的集群名称可以通过浏览器输入localhost:9200来获取cluster name
                .put("cluster.name", clusterName).build();
        client = new PreBuiltTransportClient(settings);
        System.out.println("clusterName:" + clusterName);
        return settings;
    }
}

my.properties 配置文件

#es服务地址
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"
      }
    }
  }
    
}

//page_id 和 nextpage为数据库字段
//要查询条件为nextpage=“123”的结果通过page_id去重

//uid_nextpage 为自己取的名字,page_id 为字段名称
        AggregationBuilder aggregations =
                AggregationBuilders
                        .terms("uid_nextpage").field("page_id");
//                        .subAggregation(
//                                AggregationBuilders.topHits("top").addSort("createTime",SortOrder.DESC)
//                                        .setSize(1)
//                        );
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)
//                .setSize(100)
                .get();



Terms aggs = responses.getAggregations().get("uid_nextpage");
for (Terms.Bucket entry : aggs.getBuckets()) {
    String key = String.valueOf(entry.getKey()) ; //page_id值
    long docCount = entry.getDocCount(); //page_id的值共有几条
    System.out.println("key:"+ key +" doc_count:"+ docCount);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值