Elasticsearch批量索引和删除

批量索引和删除
 
Java代码  收藏代码
BulkRequestBuilder bulkRequest = client.prepareBulk();  
        for(int i=500;i<1000;i++){  
            //业务对象  
            String json = ESUtils.toJson(new LogModel());  
            IndexRequestBuilder indexRequest = client.prepareIndex("twitter", "tweet")  
            //指定不重复的ID        
            .setSource(json).setId(String.valueOf(i));  
            //添加到builder中  
            bulkRequest.add(indexRequest);  
        }  
          
        BulkResponse bulkResponse = bulkRequest.execute().actionGet();  
        if (bulkResponse.hasFailures()) {  
            // process failures by iterating through each bulk response item  
            System.out.println(bulkResponse.buildFailureMessage());  
        }  
 上面只是批量索引的方法,将client.prepareIndex改为client.prepareDelete就是批量删除操作。ES对批量操作作了优化,所以大家使用时,尽量将操作集中起来调用批量接口,速度会更快一些。
 
 
搜索(Search)


这里说的搜索仅仅是简单相等条件搜索,并没有涉及真正意义上的搜索。比如,我们要搜索前1000条记录,代码如下:
 
Java代码  收藏代码
SearchResponse response = client.prepareSearch("twitter")  
//这个在prepareSearch中指定还不行,必须使用setTypes  
                .setTypes("tweet")  
                //设置查询条件,  
                .setFilter(FilterBuilders.matchAllFilter())  
                .setFrom(0).setSize(1000)  
                .execute()  
                .actionGet();  
        /**
         * SearchHits是SearchHit的复数形式,表示这个是一个列表
         */  
        SearchHits shs = response.getHits();  
        for(SearchHit hit : shs){  
            System.out.println("id:"+hit.getId()+":"+hit.getSourceAsString());  
        }  
        client.close();  
 搜索有两种方法,一种是使用Filter进行搜索,一种是使用Query进行搜索,例如,想只搜索某个字段为具体值的数据,也可以这样写。
 
 
Java代码  收藏代码
Client client = ESUtils.getClient();  
        /**
         * 创建查询条件,QueryBuilders相当于Hibernate的Restrictions,
         * 而QueryBuilder则相当于一个Criteria,可以不停的增加本身对象
         */  
        BoolQueryBuilder query = QueryBuilders.boolQuery();  
                 //systemName为字段名称,oa未字段值  
        query.must(QueryBuilders.termQuery("systemName", "oa"));  
        SearchResponse response = client.prepareSearch("twitter")  
//这个在prepareSearch中指定还不行,必须使用setTypes  
                .setTypes("tweet")  
                //设置查询条件,  
                .setQuery(query)  
                .setFrom(0).setSize(60)  
                .execute()  
                .actionGet();  
        /**
         * SearchHits是SearchHit的复数形式,表示这个是一个列表
         */  
        SearchHits shs = response.getHits();  
        for(SearchHit hit : shs){  
            System.out.println(hit.getSourceAsString());  
        }  
        client.close();  
 
 
这些只是使用ES的传统用法,就是想用ES取代传统数据库的用法。但其实ES的主要目的并非如此,相信你使用搜索引擎也不是想做这些简单的查询和插入。排名,分词等更高级的用法,我也没有完全搞清楚,还望大家多多指教。
 

猜你喜欢

转载自blog.csdn.net/aa1215018028/article/details/84293487