오늘 간단히 다루어볼 내용은 엘라스틱서치의 REST 자바 클라이언트인 Rest High Level Client를 이용하여 Index Template을 생성해보는 예제이다. 바로 예제로 들어간다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public void indexTemplate() throws IOException {
        
        String typeName = "_doc";
        
        if(!existTemplate()) {
            
            try(RestHighLevelClient client = createConnection();){
                PutIndexTemplateRequest templateRequest = new PutIndexTemplateRequest("log-template");
                
                templateRequest.patterns(Arrays.asList("logstash-*"));
                
                XContentBuilder mapping = XContentFactory.jsonBuilder()
                                                         .startObject()
                                                             .startObject(typeName)
                                                                 .startObject("properties")
                                                                     .startObject("date")
                                                                           .field("type","date")
                                                                      .endObject()
                                                                      .startObject("fieldName")
                                                                          .field("type","keyword")
                                                                      .endObject()
                                                                 .endObject()
                                                             .endObject()
                                                         .endObject();
                
                templateRequest.mapping("_doc", mapping);
                
                AcknowledgedResponse templateResponse = client.indices().putTemplate(templateRequest, RequestOptions.DEFAULT);
                
                if(!templateResponse.isAcknowledged()) throw new ElasticsearchException("Create Index Template Failed !");
                
            }
        }
        
    }
cs

 

해당 인덱스 템플릿으로 생성될 수 있는 인덱스 패턴은 배열로 여러개 지정가능하다. 현재 설정은 단순 mapping만 설정하였지만, settings 정보까지 인덱스 템플릿 설정으로 넣어줄 수 있다. 만약 로그스태시나 비트 프레임워크를 엘라스틱과 연동하여 일자별 로그를 수집하는 기능을 구현한다면 미리 인덱스 템플릿으로 생성될 인덱스의 정의를 잡아주는 것이 좋을 것이다.

 

이제 해당 인덱스 템플릿을 구성한 이후에 logstash-*로 시작하는 인덱스가 생성될때 위와 같은 mapping 설정대로 필드가 생성될 것이다.

posted by 여성게
: