ElasticSearch-常用API(二)

ES版本基于2.4.1编写,其他版本会照成客户端连接异常。

API简介

查询所有,单字段 词条查询,时间段查询,组合查询or,组合查询and,模糊查询,创建索引,查看集群信息,单个更新,其他功能持续更新,都是常用的基础。

EsApi
package com.elastic.api;

import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.metrics.avg.AvgBuilder;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 17-9-6
 * Time: 上午9:52
 * To change this template use File | Settings | File Templates.
 */
public class EsApi {

    public TransportClient client;

    public EsApi( TransportClient client){
            this.client = client;
    }

    /**
     * 创建索引
     */
    public  void createIndex(BulkRequestBuilder brb1){

            for(int i = 0 ;i<10;i++){
                String json =  "{\"gs\":"+(10-i)+",\"study\": "+i+"}";
                IndexRequest request = client.prepareIndex("test", "test").setSource(json).request();
                brb1.add(request);
            }
            BulkResponse bulkResponse = brb1.execute().actionGet();
    }

    /**
     * 查看集群信息
     */
    public  void getClusterInfo() {
        List<DiscoveryNode> nodes = client.connectedNodes();
        for (DiscoveryNode node : nodes) {
            System.out.println(node.toString());
        }
    }


    /**
     * 单个更新
     */
    public  void singleUpdate(String id,String json) {
        client.prepareUpdate().setIndex("test").setType("test").setId(id).setDoc(json).execute().actionGet();
    }


    public void queryBuilders(){
        //查询所有
//        QueryBuilder qb = QueryBuilders.matchAllQuery();
        //单字段 词条查询
//        QueryBuilder qb =   QueryBuilders.termsQuery("study_gs",new int[]{1,2,3});
        //时间段查询
//        QueryBuilders.rangeQuery("time").from(1490926962223.0).to(1490926965000.0) ;
        //组合查询or
//        QueryBuilder qb =  (QueryBuilders.boolQuery()
//                .should(QueryBuilders.termsQuery("study",new int[]{1})))
//                .should(QueryBuilders.termsQuery("gs",new int[]{4}));
        //组合查询and
//        QueryBuilder qb =  QueryBuilders.boolQuery()
//                .must(QueryBuilders.termsQuery("study",new int[]{1})) ;
         //模糊查询
        QueryBuilder qb = QueryBuilders.wildcardQuery("study","1");

        sysOut(qb,null);

    }

    /**
     * 删除一条数据
     */
    public void deleteDoc(String id) {
        DeleteResponse deleteResponse  = this.client
                .prepareDelete()
                .setIndex("test")
                .setType("test")
                .setId(id)
                .get();
        System.out.println(deleteResponse.isFound()); // true表示成功
    }


    /**
     * 统一输出方法
     */
    public void sysOut(QueryBuilder qb,AvgBuilder ab ){
        SearchResponse actionGet = null;
        if(null == ab){
             actionGet = client.prepareSearch("test")
                    .setTypes("test")
                    .setQuery(qb)
                    .setSize(20)
                    .execute()
                    .actionGet();
        }else{
             actionGet = client.prepareSearch("test")
                    .setTypes("test")
                    .setQuery(qb)
                    .addAggregation(ab)
                    .setSize(20)
                    .execute()
                    .actionGet();
        }


        SearchHits hits =  actionGet.getHits();
        System.out.println("Hints:"+hits.getTotalHits());
        for (SearchHit hit : hits.getHits()){ //getHits 的使用
            System.out.println(hit.getSourceAsString());//这样可以获得属性的值
//            System.out.println(hit.getSource().get("study_gs"));
        }
    }



}
EsClient
package com.elastic.api;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;


public class EsClient {
    private static TransportClient client;
    static{
        String hostString1 = "10.2.4.15";
        String hostString2 = "10.2.4.42";
        String hostString3 = "10.2.4.43";
        int port = 9300;
        Settings settings = Settings.settingsBuilder()
                .put("cluster.name", "SOC-15")
                .put("transport.tcp.compress", true)
                .build();

        TransportAddress[] addressArr = new TransportAddress[3];
        try {
            addressArr[0] = new InetSocketTransportAddress(InetAddress.getByName(hostString1), port);
            addressArr[1] = new InetSocketTransportAddress(InetAddress.getByName(hostString2), port);
            addressArr[2] = new InetSocketTransportAddress(InetAddress.getByName(hostString3), port);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

        client = TransportClient.builder().settings(settings).build().addTransportAddresses(addressArr);

    }

    //测试
    public static void main(String[] args) {
        EsApi ea = new EsApi(client);
        //创建索引
//        BulkRequestBuilder brb = client.prepareBulk();
//        ea.createIndex( brb);
        //获取节点信息
//        ea.getClusterInfo();
//        ea.singleUpdate("485313b09de0491ea2bacb524965613a","{\"yjd\": 10,\"study_yjd\": 10}");
        //删除
        ea.deleteDoc("AV5V7ZmXKBTIVYuVW0Zt");
        //查询
//        ea.queryBuilders();
        close();
    }

    public static void  close()
    {
        try {
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                client.close();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
}





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值