spring / / 2024. 5. 13. 11:11

spring-elastic에서 인덱스명을 동적으로 생성하는 방법

spring-elastic을 사용하여 인덱스를 만드는 기본적인 방법은 아래와 같다.

@Document(
    indexName = "log",
)
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class KafkaLogDoc {

    @Id
    @Field(type = FieldType.Keyword)
    private String id;

    @Field(type = FieldType.Keyword)
    private name ;

    <추가 필드>
}

여기서 indexName을 log-2014-05-13 형식으로 만들고 싶은 경우가 있다. 날짜별로 인덱스를 자동생성되게 하는 경우이다.

스프링 빈을 활용하는 방법

@Component
public class IndexNameProvider {

    public String dateSuffix() {
        LocalDate today = LocalDate.now();
        return today.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }
}

스프링 빈을 하나 생성한다. 그리고 인덱스명 뒤에 붙을 패턴을 정의한다.

그리고 @Document에 SPEL로 해당 빈에서 정의한 dateSuffix를 추가한다.

@Document(
    indexName = "log" + "-#{@indexNameProvider.dateSuffix()}",
)
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class KafkaLogDoc {

    @Id
    @Field(type = FieldType.Keyword)
    private String id;

    @Field(type = FieldType.Keyword)
    private name ;

    <추가 필드>
}

그러면 인덱스가 생성될 때 log-2014-05-13 형식으로 생성이 된다.

static 메소드를 사용하는 방법

@Document(
    indexName = "log" + "-#{T(java.time.LocalDate).now().toString()}",
)

이렇게 지정하면 인덱스명이 log-2014-05-13 형식으로 생성이 된다.

참고

https://www.sothawo.com/2020/07/how-to-provide-a-dynamic-index-name-in-spring-data-elasticsearch-using-spel/

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유