Elasticsearch
Elasticsearch + spirng boot 연동(SELECT)
illho
2024. 3. 31. 14:11
데이터를 조회할때 SORT를 추가해보려 한다.
SortData.java
@Data
public class SortData {
private String field;
private SortOrder type;
}
SortOrder는 elasticsearch 라이브러리 SortOrder 클래스를 import해서 사용한다.
SearchApi.java : _searchScroll 메소드에 추가한다.
if(sortList != null) {
for(SortData data : sortList) {
searchSourceBuilder.sort(new FieldSortBuilder(data.getField()).order(data.getType()));
}
}
이 코드는 sortList에 있는 각 SortData 객체를 순회하면서 필드와 정렬 순서를 읽어들여 Elasticsearch의 FieldSortBuilder를 생성하고, 이를 검색 요청에 추가한다. 따라서 sortList에 있는 각 필드와 정렬 순서에 따라 검색 결과가 정렬된다.
ElasticsearchSample1.java
ArrayList<SortData> sortList = new ArrayList<>();
SortData sortData1 = new SortData();
sortData1.setField("item_date");
sortData1.setType(SortOrder.DESC);
sortList.add(sortData1);
item_date 필드 기준 내림차순 정렬로 데이터를 조회해보려고한다.
일단 SORT를 사용하지 않고 조회한 결과이다.
SORT를 적용해서 실행 시켜보았다.
결과
로그에 나온 쿼리로 키바나에서 조회해본다.
#! Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.14/security-minimal-setup.html to enable security.
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 5,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "items",
"_type" : "_doc",
"_id" : "item3",
"_score" : 1.0,
"_source" : {
"id" : "item3",
"item_date" : "2024-01-15"
}
},
{
"_index" : "items",
"_type" : "_doc",
"_id" : "item4",
"_score" : 1.0,
"_source" : {
"id" : "item4",
"item_date" : "2024-02-15"
}
},
{
"_index" : "items",
"_type" : "_doc",
"_id" : "item5",
"_score" : 1.0,
"_source" : {
"id" : "item5",
"item_date" : "2024-03-15"
}
},
{
"_index" : "items",
"_type" : "_doc",
"_id" : "item2",
"_score" : 1.0,
"_source" : {
"id" : "item2",
"item_date" : "2023-08-15"
}
},
{
"_index" : "items",
"_type" : "_doc",
"_id" : "item1",
"_score" : 1.0,
"_source" : {
"id" : "item1",
"item_date" : "2023-11-15"
}
}
]
}
}
가장 최근 날짜부터 가장 오래된 날짜로 내림차순 정렬로 결과가 나온 걸 볼수있다.