ElasticSearch 시작 Bulk, Serach 작업

3012 단어 검색 엔진

대량 색인 및 삭제

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.prepare Delete는 대량 삭제 작업입니다.ES는 대량 작업에 최적화를 하였기 때문에 모두가 사용할 때 가능한 한 조작을 집중하여 대량 인터페이스를 호출하면 속도가 좀 더 빨라질 것이다.
 
 

검색(Search)


여기서 말하는 검색은 단순히 동일한 조건의 검색일 뿐 진정한 의미의 검색과는 관련이 없다.예를 들어 우리는 첫 1000개의 기록을 검색하려고 하는데 코드는 다음과 같다.
 

    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를 사용하여 검색하는 것이다. 예를 들어 특정한 필드가 구체적인 값인 데이터만 검색하고 싶으면 이렇게 쓸 수도 있다.
 
lient 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의 주요 목적은 그렇지 않다. 검색엔진을 사용하는 것도 이런 간단한 검색과 삽입을 하려는 것이 아니라고 믿는다.순위, 분사 등 더 높은 용법은 저도 완전히 알지 못했으니 많은 가르침을 바랍니다.

좋은 웹페이지 즐겨찾기