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"
        }
      }
    ]
  }
}

 

가장 최근  날짜부터 가장 오래된 날짜로 내림차순 정렬로 결과가 나온 걸 볼수있다.