엘라스틱 을 조회할떄 네이밍에 언더바(언더스코어)가 들어간 경우 일반적인 방법으로 ElasticsearchRepository 라이브러리로 조회가 가능하지 않다.
EX) name_field : '데이터'
이거 오류 해결 방법 좀 알고 싶었으나 지지고 볶아도 오류해결 방법이 없다.
애초에 네이밍을 카멜로 했거나 그게 안되면 ElasticsearchOperations 을 사용해서 엘라스틱 조회를 해야한다.
간편하게 사용하기에는 아무래도 ElasticsearchRepository 가 jpa 랑 같아 사용하기 편한데, 복잡한 쿼리에는 불편한 점이 따르니 어쩔 수 없다.
굳이 언더바를 검색하려면 방법은 있다.
@Repository
public interface SampleRepository extends ElasticsearchRepository<SampleData, String> {
@Query("{\"bool\": {\"must\": {\"match\": {\"name_field\": \"?0\"}}}}")
List<SampleData> findByName(String name);
}
이런 식으로 네이티브 쿼리를 보내는 방법 밖에 알 수가 없다.
하지만 이렇게 할거면 굳이 ElasticsearchRepository 를 쓰는 이유가 있을까 싶다. 그냥 ElasticsearchOperations 로만 사용해도 된다.
또는 ElasticsearchRepository 에서 search 메소드에 queryBuilder 를 넣어서 ElasticsearchOperations처럼 사용해도 된다.
새로 업데이트 된 엘라스틱에서는 가능해졌는지는 모르겠지만,
내가 사용중인 버젼 spring boot 2.1.2,
spring-data-elasticsearch:3.1.4 에서는 가능하지 않다.
아마 상위버젼에서도 불가 할 것이다.
jpa 에서는 @Colunm(name="name_field") 이런식으로 해결 가능한데, elastic 에는 이러한 어노테이션이 존재하지가 않아 되지 않는다.
구글링을 하면 @@JsonProperty("name_field") 이렇게 해결하라는 글이 하나 있는데, 동작하지 않는다. 찾아보면 다 동작이 안된다는 말이 더 많다.
처음 엘라스틱 데이터를 만들때 언더바, 언더스코어 등을 네이밍에 사용하지 말고 카멜케이스로 만들자..
참고
stackoverflow.com/questions/50528299/query-elasticsearch-using-spring-data-elasticsearch-with-fields-containing-under
'Spring > spring boot 및 기타' 카테고리의 다른 글
[spring] 스프링 HikariDatasource 속성 값 (0) | 2021.03.31 |
---|---|
[spring] 스프링 elasticsearch NativeSearchQuery 사용방법 (0) | 2021.03.16 |
[spring] 스프링에서 사용하는 RestTemplate - http 라이브러리 (0) | 2021.02.26 |
[spring boot] 스프링부트 에서 elasticsearch 시작하기 (1) | 2021.02.24 |
Jasypt 암호화 - spring 설정파일 암호화하기 (0) | 2021.01.28 |