[SPRING] Spring-Data Elasticsearch를 사용하여 동적으로 Elasticsearch에서 인덱스 이름 만들기
SPRINGSpring-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.내 응용 프로그램에서 내가하고있는 일은 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.프로젝트에서 내가하고있는 일은 인덱스 이름과 타입 이름이 DB에 저장 될 때마다 DB에 저장하는 것입니다.
프로젝트에서 내가하고있는 일은 인덱스 이름과 타입 이름이 DB에 저장 될 때마다 DB에 저장하는 것입니다.
이제 인덱스와 인덱스를 동적으로 얻는 방법은 다음과 같습니다.
from https://stackoverflow.com/questions/33894618/creating-indices-name-dynamically-in-elasticsearch-using-spring-data-elasticsear by cc-by-sa and MIT license