博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
elasticsearch,java api, transport Client, 查询时索引库可以用通配符*和删除接口不能用...
阅读量:7054 次
发布时间:2019-06-28

本文共 3608 字,大约阅读时间需要 12 分钟。

1,获得transport client连接实例

/**     * 获取ES的连接client实例;     *     * @return TransportClient对象     */    private static TransportClient getTransportClient(String esIp) throws IOException {        Settings settings = Settings.builder()                .put(CLUSTER_NAME, "xxx")                .put(ELASTIC.CLIENT_TRANSPORT_SNIFF, true)                .build();        TransportClient transportClient = TransportClient.builder().settings(settings).build();        String[] ips =esIp.split(",");        for (String ip : ips) {            try {                InetSocketTransportAddress ist = new InetSocketTransportAddress(InetAddress.getByName(ip),ELASTIC.ES_TRANSPORTCLIENT_PORT);                transportClient.addTransportAddress(ist);            }catch (Exception e){            }        }        return transportClient;    }

  

2,  封装查询对象,可以用* 通配索引库,以及设置最大返回数量

@Test    public  void querySearch() throws IOException {           long l = System.currentTimeMillis();        TransportClient transportClient = Factory.getTransportClient();        //封装聚合的查询条件        RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(TIME_FIELD).from(startTime).to(endTime);        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("xx", "xxx");       // QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder().must(rangeQueryBuilder).must(matchQueryBuilder);// 使用通配符‘*’来前缀匹配INDEX开头的所有索引库        SearchResponse response=transportClient.prepareSearch("INDEX*")        .setTypes("TYPE")        // 设置查询类型        // 1.SearchType.DFS_QUERY_THEN_FETCH = 精确查询        // 2.SearchType.SCAN = 扫描查询,无序        // 3.SearchType.COUNT = 不设置的话,这个为默认值,还有的自己去试试吧        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)        // 设置查询关键词        .setQuery(boolQueryBuilder)        // 设置查询数据的位置,分页用        .setFrom(0)        // 设置查询结果集的最大条数        .setSize(1000)        // 设置是否按查询匹配度排序        .setExplain(true)        // 最后就是返回搜索响应信息        .execute()        .actionGet();        SearchHits searchHits=response.getHits();//        System.out.println("-----------------在["+term+"]中搜索关键字["+queryString+"]---------------------");        System.out.println(System.currentTimeMillis() - l);        System.out.println("共匹配到:"+searchHits.getTotalHits()+"条记录!");        SearchHit[]hits=searchHits.getHits();        for(SearchHit searchHit:hits){            Map
sourceAsMap=searchHit.sourceAsMap(); Set
keySet=sourceAsMap.keySet(); for(String string:keySet){ //key value 值对应关系 System.out.println(string+":"+sourceAsMap.get(string)); } System.out.println(); } } 

3, 根据id删除索引文档接口,单个与批量,删除接口索引库不能用通配'*'来匹配

1,单个id删除索引文档

//INDEX:索引库名称(不能用通配符),TYPE:索引库的type ,ID索引库的ID  DeleteResponse deleteResponse = client.prepareDelete("INDEX", "TYPE", "ID").get();       //成功删除if(deleteResponse.isFound()){    successEs.add(rowkey); }else {    failedEs.add(rowkey);  }

2, 根据ids批量删除索引文档

@Test   public void removeDataFromEs() throws IOException {        ArrayList
xxx= new ArrayList<>(); xxx.add("201801001"); xxx.add("201801001"); TransportClient client = Factory.getTransportClient(); BulkRequestBuilder builder=client.prepareBulk(); for(String id:xxx){ System.out.println(id); builder.add(client.prepareDelete("INDEX", "TYPE", id).request()); }}BulkResponse bulkResponse = builder.get();

3,Elasticseach根据索引的时间,进行范围查找数据时性能不太好。

转载于:https://www.cnblogs.com/yanyuechao/p/8367426.html

你可能感兴趣的文章
解题思路:蓄水池问题
查看>>
android 实时显示系统时间
查看>>
fatal error: asm/system.h: No such file or directory
查看>>
为什么要设计
查看>>
SerializableObj
查看>>
2018年5月31日笔记
查看>>
(转)CentOs上配置samba服务
查看>>
Photoshop给草坪上的人物加上唯美的紫色霞光
查看>>
移动平台对 META 标签的定义
查看>>
curl 命令详解
查看>>
启动改为本地Ip
查看>>
云服务器CentOS7.5安装MySQL5.7
查看>>
代理模式
查看>>
vue文档阅读笔记——计算属性和侦听器
查看>>
单元测试系列:Mock工具之Mockito实战
查看>>
二手GTX650
查看>>
Guava学习-缓存
查看>>
hexSHA1散列加密解密(不可逆)
查看>>
Pinterest架构:两年内月PV从零到百亿 - 非常值得参考【转】 - HorsonJin - 博客园...
查看>>
Swift设置自动行高
查看>>