Bulk,Search操做

其實在上一篇博客中,只要你們能看懂,就應該能夠根據其代碼作到舉一反三了,依次類推ES的批量操做Bulk,搜索功能Search等,但在這裏還是簡單講一下。
 
批量索引和刪除
 
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的主要目的並非如此,相信你使用搜索引擎也不是想作這些簡單的查詢和插入。排名,分詞等更高級的用法,我也沒有徹底搞清楚,還望你們多多指教。json

相關文章
相關標籤/搜索