ElasticSearch使用代码

package elasticsearch01;

import static org.junit.Assert.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.count.CountResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.common.collect.ImmutableList;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.FilterBuilders;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.elasticsearch.search.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Before;
import org.junit.Test;

import com.fasterxml.jackson.databind.ObjectMapper;

public class EsTest {

    String index = "crxy";
    String type = "emp";
    TransportClient transportClient;
    /**
     * 相当于初始化方法,在执行其他测试类之前会首先被调用
     * @throws Exception
     */
    @Before
    public void before() throws Exception {
        transportClient = new TransportClient();
        TransportAddress transportAddress = new InetSocketTransportAddress("192.168.1.170", 9300);
        transportClient.addTransportAddress(transportAddress);
    }

    /**
     * 自己写测试类的时候可以用这个
     * @throws Exception
     */
    @Test
    public void test1() throws Exception {

        GetResponse response = transportClient.prepareGet(index , type , "1").execute().actionGet();
        String sourceAsString = response.getSourceAsString();
        System.out.println(sourceAsString);
    }

    /**
     * 工作中使用-1
     * @throws Exception
     */
    @Test
    public void test2() throws Exception {
        Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build();
        TransportClient transportClient = new TransportClient(settings);
        TransportAddress transportAddress = new InetSocketTransportAddress("192.168.1.170", 9300);
        TransportAddress transportAddress1 = new InetSocketTransportAddress("192.168.1.171", 9300);
        transportClient.addTransportAddresses(transportAddress,transportAddress1);
        GetResponse response = transportClient.prepareGet(index , type , "1").execute().actionGet();
        String sourceAsString = response.getSourceAsString();
        System.out.println(sourceAsString);
    }

    /**
     * 工作中使用-2
     * @throws Exception
     */
    @Test
    public void test3() throws Exception {
        Settings settings = ImmutableSettings.settingsBuilder()
                .put("cluster.name", "elasticsearch")
                .put("client.transport.sniff", true)//自动嗅探机制,可以自动链接集群中的其他节点
                .build();
        TransportClient transportClient = new TransportClient(settings);
        TransportAddress transportAddress = new InetSocketTransportAddress("192.168.1.170", 9300);
        TransportAddress transportAddress1 = new InetSocketTransportAddress("192.168.1.171", 9300);
        transportClient.addTransportAddresses(transportAddress,transportAddress1);

        ImmutableList<DiscoveryNode> connectedNodes = transportClient.connectedNodes();
        for (DiscoveryNode discoveryNode : connectedNodes) {
            System.out.println(discoveryNode.getHostAddress());
        }

    }

    /**
     * index -json格式
     * @throws Exception
     */
    @Test
    public void test4() throws Exception {
        String source = "{\"name\":\"mm\",\"age\":\"19\"}";
        IndexResponse response = transportClient.prepareIndex(index, type, "2").setSource(source).execute().actionGet();
        String id = response.getId();
        System.out.println(id);
    }

    /**
     * index - map
     * @throws Exception
     */
    @Test
    public void test5() throws Exception {
        HashMap<String, Object> source = new HashMap<String, Object>();
        source.put("name", "ww");
        source.put("age", 20);

        IndexResponse response = transportClient.prepareIndex(index, type).setSource(source).execute().actionGet();
        String id = response.getId();
        System.out.println(id);

    }

    /**
     * index - 对象
     * @throws Exception
     */
    @Test
    public void test6() throws Exception {
        User user = new User();
        user.setAge(29);
        user.setName("nn");

        ObjectMapper objectMapper = new ObjectMapper();
        IndexResponse response = transportClient.prepareIndex(index, type, "4").setSource(objectMapper.writeValueAsString(user)).execute().actionGet();
        String id = response.getId();
        System.out.println(id);

    }

    /**
     * index -eshelp
     * @throws Exception
     */
    @Test
    public void test7() throws Exception {
        XContentBuilder endObject = XContentFactory.jsonBuilder().startObject().field("name", "lk").field("age", 28).endObject();
        IndexResponse response = transportClient.prepareIndex(index, type, "5").setSource(endObject).get();
        String id = response.getId();
        System.out.println(id);
    }

    /**
     * get
     * @throws Exception
     */
    @Test
    public void test8() throws Exception {
        GetResponse response = transportClient.prepareGet(index, type, "5").get();
        System.out.println(response.getSourceAsString());
    }

    /**
     * update
     * @throws Exception
     */
    @Test
    public void test9() throws Exception {
        XContentBuilder endObject = XContentFactory.jsonBuilder().startObject().field("name","zs").endObject();

        UpdateResponse response = transportClient.prepareUpdate(index, type, "5").setDoc(endObject).get();
        System.out.println(response.getVersion());

    }

    /**
     * upsert
     * @throws Exception
     */
    @Test
    public void test10() throws Exception {
        UpdateRequest request = new UpdateRequest();
        request.index(index);
        request.type(type);
        request.id("6");

        XContentBuilder endObject = XContentFactory.jsonBuilder().startObject().field("name", "aa").endObject();
        request.doc(endObject);

        XContentBuilder endObject2 = XContentFactory.jsonBuilder().startObject().field("name", "crxy").field("age", 10).endObject();
        request.upsert(endObject2);

        UpdateResponse response = transportClient.update(request ).get();

        System.out.println(response.getVersion());
    }

    /**
     * 删除
     * @throws Exception
     */
    @Test
    public void test11() throws Exception {
        DeleteResponse response = transportClient.prepareDelete(index, type, "6").get();
        System.out.println(response.getVersion());
    }

    /**
     * 删除
     * @throws Exception
     */
    @Test
    public void test11_1() throws Exception {
        DeleteByQueryResponse response = transportClient.prepareDeleteByQuery(index).setQuery(QueryBuilders.matchAllQuery()).get();
    }

    /**
     * 查询索引库中数据的总量,类似于sql中的select *
     * @throws Exception
     */
    @Test
    public void test12() throws Exception {
        CountResponse response = transportClient.prepareCount(index).get();
        System.out.println(response.getCount());
    }

    /**
     * 批量操作 bulk
     * @throws Exception
     */
    @Test
    public void test13() throws Exception {
        BulkRequestBuilder bulkBuilder = transportClient.prepareBulk();
        IndexRequest indexrequest = new IndexRequest(index,type,"6");
        XContentBuilder endObject = XContentFactory.jsonBuilder().startObject().field("name", "sss").field("age111", 001).endObject();
        indexrequest.source(endObject);
        //TODO---

        bulkBuilder.add(indexrequest );
        DeleteRequest deleteRequest = new DeleteRequest(index,type,"5");
        bulkBuilder.add(deleteRequest);

        BulkResponse bulkResponse = bulkBuilder.get();

        if(bulkResponse.hasFailures()){
            System.out.println("执行失败:");
            BulkItemResponse[] items = bulkResponse.getItems();
            for (BulkItemResponse bulkItemResponse : items) {
                String failureMessage = bulkItemResponse.getFailureMessage();
                System.out.println(failureMessage);
            }
        }else{
            System.out.println("正常执行");
        }

    }
    /**
     * 查询,排序,分页,高亮,过滤
     * lt:小于
     * lte:小于等于
     * gt:大于
     * gte:大于等于
     * @throws Exception
     */
    @Test
    public void test14() throws Exception {
        SearchResponse searchResponse = transportClient.prepareSearch(index)
                            .setTypes(type)
                            .setSearchType(SearchType.QUERY_THEN_FETCH)
                            .setQuery(QueryBuilders.matchQuery("name", "zs"))
                            //.setPostFilter(FilterBuilders.rangeFilter("age").gt(20).lte(28))
                            .setFrom(0)
                            .setSize(10)
                            .addHighlightedField("name")
                            .setHighlighterPreTags("<font color=‘red‘>")
                            .setHighlighterPostTags("</font>")
                            .addSort("age", SortOrder.DESC)
                            .get();

        SearchHits hits = searchResponse.getHits();
        long totalHits = hits.getTotalHits();
        System.out.println("总数:"+totalHits);

        for (SearchHit searchHit : hits) {
            Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
            HighlightField highlightField = highlightFields.get("name");
            Text[] fragments = highlightField.fragments();
            System.out.println(searchHit.getSourceAsString());
            for (Text text : fragments) {
                System.out.println("高亮内容"+text);
            }
        }
    }

    /**
     * 类似于这个select count(*),name from table group by name;
     * @throws Exception
     */
    @Test
    public void test15() throws Exception {
        SearchResponse searchResponse = transportClient.prepareSearch(index)
        .setTypes(type)
        .addAggregation(AggregationBuilders.terms("nameterm").field("name").size(0)).get();

        Terms terms = searchResponse.getAggregations().get("nameterm");

        List<Bucket> buckets = terms.getBuckets();
        for (Bucket bucket : buckets) {
            System.out.println(bucket.getKey()+"--->"+bucket.getDocCount());
        }
    }

    /**
     * 类似于select sum(age),name from table group by name;
     * @throws Exception
     */
    @Test
    public void test16() throws Exception {
        SearchResponse searchResponse = transportClient.prepareSearch(index)
        .setTypes(type)
        .addAggregation(AggregationBuilders.terms("nameterm").field("name").
                    subAggregation(AggregationBuilders.sum("agesum").field("age")).size(0)).get();

        Terms terms = searchResponse.getAggregations().get("nameterm");

        List<Bucket> buckets = terms.getBuckets();
        for (Bucket bucket : buckets) {
            Sum sum = bucket.getAggregations().get("agesum");

            System.out.println(bucket.getKey()+"--->"+sum.getValue());
        }
    }

}
时间: 2024-08-27 23:40:47

ElasticSearch使用代码的相关文章

elasticsearch远程代码执行漏洞告警

es版本:1.7.2 最近在做es项目的时候出现,启动es一段时间系统就会报警,结果查询了一下,原来是es的漏洞: 官网描述: 大致意思就是: 漏洞出现在脚本查询模块,默认搜索引擎支持使用脚本代码(MVEL)作为表达式进行数据操作,MVEL会被脚本语言引擎换成Groovy,并且加入了沙盒进行控制,危险的代码会在这里被拦截.但是安全研究人员发现,沙盒限制存在过滤不严的情况,攻击者可以通过MVEL构造执行任意java代码,导致远程代码执行. 官方解决方案: 关掉执行脚本功能,在配置文件elastic

elasticsearch java 代码参考

package utils; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; import org.elastics

MapReduce编程(六) 从HDFS导入数据到Elasticsearch

一.Elasticsearch for Hadoop安装 Elasticsearch for Hadoop并不像logstash.kibana一样是一个独立的软件,而是Hadoop和Elasticsearch交互所需要的jar包.所以,有直接下载和maven导入2种方式.安装之前确保JDK版本不要低于1.8,Elasticsearch版本不能低于1.0. 官网对声明是对Hadoop 1.1.x.1.2.x.2.2.x.2.4.x.2.6.x.2.7.x测试通过,支持较好,其它版本的也并不是不能用

Logstash与Elasticsearch日志分析系统搭建

logstash(1.4.2)是一个不错的日志监控与分析工具,数据通过logstash使用后端的ElasticSearch(1.1.1)集群完成数据索引,以供后续的查询.分析使用.版本必须保持兼容否则报一下错误 Upgrade Required Your version of Elasticsearch is too old. Kibana requires Elasticsearch 0.90.9 or above. Error Could not reach http://182.92.7.

Elasticsearch就这么简单

一.前言 最近有点想弄一个站内搜索的功能,之前学过了Lucene,后来又听过Solr这个名词.接着在了解全文搜索的时候就发现了Elasticsearch这个,他也是以Lucene为基础的. 我去搜了几篇Elasticsearch教程,发现很多都是基于linux的,但我linux耍得并不熟,很少用.仅仅会一些简单的命令,等真正去用到linux的时候再慢慢啃吧. 于是发现了一篇写得很好的教程: http://blog.csdn.net/laoyang360/article/details/52244

tushare获取股票每日重要的基本面指标数据,并存入Elasticsearch

tushare是一个开放的,免费的金融数据平台,包含沪深股票数据,指数数据,基金数据,期货数据,期权数据,债券数据,外汇数据,港股数据,行业经济数据,宏观经济数据以及新闻快讯等特色数据.其中以沪深股票数据最为丰富,包含了有: 基础数据 股票列表 交易日历 股票曾用名 沪深股通成分股 上市公司基本信息 上市公司管理层 管理层薪酬和持股 IPO新股上市 行情数据 日线行情 周线行情 月线行情 复权行情 复权因子 停复牌信息 每日指标 通用行情接口 个股资金流向 每日涨跌停价格 每日涨跌停统计 沪深港

内网渗透+基础+工具使用=自己理解

目录 1.代理 2.内网命令 3.抓密码 4.ipc$共享目录利用 5.端口漏洞 6.溢出 1.代理 端口转发工具有很多比如:rebind2  eDuh  ssock  reDuh  lcx  socks5 等--.. 下面介绍我比较喜欢的2款工具LCX+ socks5 1.lcx 路由器加端口 TCP协议 ,固定IP地址本机 大马设置 Local Ip : 转发ip Local Port : 转发端口 Remote Ip :本机ip (ip138.com外网ip) Remote Port :

端口渗透

端口渗透总结 0x00 背景 端口渗透过程中我们需要关注几个问题: 1.  端口的banner信息 2.  端口上运行的服务 3.  常见应用的默认端口 当然对于上面这些信息的获取,我们有各式各样的方法,最为常见的应该就是nmap了吧!我们也可以结合其他的端口扫描工具,比如专门的3389.1433等等的端口扫描工具: 服务默认端口 公认端口(Well Known Ports):0-1023,他们紧密绑定了一些服务: 注册端口(Registered Ports):1024-49151,他们松散的绑

Java Web表达式注入

原文:http://netsecurity.51cto.com/art/201407/444548.htm 0×00 引言 在2014年6月18日@终极修炼师曾发布这样一条微博: 链接的内容是一个名为Jenkins的服务,可以在没有password的情况下受到攻击.而攻击方法比较有趣,Jenkins提供了一个Script Console功能,可以执行Groovy 脚本语言.下面我们来看下维基百科对于这个脚本语言的解释:  Groovy是Java平台上设计的面向对象编程语言.这门动态语言拥有类似P