복붙노트

[SPRING] Spring-Data Elasticsearch를 사용하여 동적으로 Elasticsearch에서 인덱스 이름 만들기

SPRING

Spring-Data Elasticsearch를 사용하여 동적으로 Elasticsearch에서 인덱스 이름 만들기

나는 Elasticsearch에서 매월 인덱스를 만들 필요가있는 유스 케이스를 가지고있다. 아이디어는 월간 기지에 인덱스를 작성하여 유지 보수가 쉽고 만료 될 때 삭제할 수 있도록하기위한 것입니다.이를 달성하기 위해서는 스프링 배치를 사용하고 월간 기준으로 인덱스를 생성하는 매월 작업을해야합니다. Elasticsearch -Java 통합 Spring-Data Elasticsearch 구현을 사용했습니다. 지금 당면한 문제는 인덱스에 동적 이름을 제공하고 Entity 객체를 사용하여 매핑하는 방법을 파악할 수 없다는 것입니다. 내 현재 구현은 단일 색인을 염두에두고 수행됩니다. 인덱스를 만들 때 사용하는 아래 코드를 찾으십시오.

elasticsearchTemplate.createIndex(SingleChat.class);
elasticsearchTemplate.putMapping(SingleChat.class);
elasticsearchTemplate.refresh(SingleChat.class, true);

SingleChat은 내 엔터티 클래스입니다.

@Document(indexName="singlemsgtemp_#{jobParameters['MONTH']}",type="singlechat")
public class SingleChat {
    @org.springframework.data.annotation.Id
    String Id;
    @Field(type = FieldType.String)
    String conservationId;
    @Field(type = FieldType.String)
    String from;
    @Field(type = FieldType.String)
    String to;
    @Field(type = FieldType.String)
    String msgContent; 
    @Field(type = FieldType.String)
    String sessionId;
    @Field(type = FieldType.Date, index = FieldIndex.not_analyzed, store = true, format = DateFormat.date_hour_minute_second_millis)
    Date postedDate;
    @Field(type = FieldType.Date, index = FieldIndex.not_analyzed, store = true, format = DateFormat.date_hour_minute_second_millis)
    Date expireDate;
}   

그러나 이것은 예상대로 작동하지 않습니다. 나는 다른 것들도 시도하고있다. 그러나 나는 제안을 위해 열려 있습니다. 또한 현재의 접근 방식에 대해 자유롭게 의견을 나눌 수 있습니다. 더 자세한 정보가 필요하면 알려주십시오.

해결법

  1. ==============================

    1.내 응용 프로그램에서 내가하고있는 일은 ElasticSearchTemplate을 사용하여 동적 색인 이름을 만든 다음 내가 만든 새 색인에 별칭을 지정하고 이전 색인을 삭제한다는 것입니다.

    내 응용 프로그램에서 내가하고있는 일은 ElasticSearchTemplate을 사용하여 동적 색인 이름을 만든 다음 내가 만든 새 색인에 별칭을 지정하고 이전 색인을 삭제한다는 것입니다.

    esTemplate.createIndex(newIndexName, loadfromFromFile(settingsFileName));
    esTemplate.putMapping(newIndexName, "MYTYPE", loadfromFromFile(mappingFileName));
    

    동적 인 것이 필요하기 때문에 클래스의 매핑 및 설정을 사용하지 않습니다.

        protected String loadFromFile(String fileName) throws IllegalStateException {
           StringBuilder buffer = new StringBuilder(2048);
           try {
               InputStream is = getClass().getResourceAsStream(fileName);
               LineNumberReader reader = new LineNumberReader(new InputStreamReader(is));
               while (reader.ready()) {
                   buffer.append(reader.readLine());
                   buffer.append(' ');
               }
           } catch (Exception e) {
               throw new IllegalStateException("couldn't load file " + fileName, e);
           }
           return buffer.toString();
       }
    
  2. ==============================

    2.프로젝트에서 내가하고있는 일은 인덱스 이름과 타입 이름이 DB에 저장 될 때마다 DB에 저장하는 것입니다.

    프로젝트에서 내가하고있는 일은 인덱스 이름과 타입 이름이 DB에 저장 될 때마다 DB에 저장하는 것입니다.

    이제 인덱스와 인덱스를 동적으로 얻는 방법은 다음과 같습니다.

  3. from https://stackoverflow.com/questions/33894618/creating-indices-name-dynamically-in-elasticsearch-using-spring-data-elasticsear by cc-by-sa and MIT license