From 8d8b5c902038ee220d0a850cd5c8958b12c1f95a Mon Sep 17 00:00:00 2001 From: Philipp Gritsch <philipp.gritsch@uibk.ac.at> Date: Wed, 15 Nov 2023 09:27:45 +0100 Subject: [PATCH] #439 add sortorder for elasticsearch query --- .../repository/search/MetaDataRepository.java | 23 ++++++++++++++++++- .../search/SearchRepositoryConstants.java | 4 ++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java index aa60a32e4..0c58b6099 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/MetaDataRepository.java @@ -7,6 +7,9 @@ import at.ac.uibk.gitsearch.repository.jpa.StatisticsRepository; import at.ac.uibk.gitsearch.service.dto.AutoCompleteEntry; import at.ac.uibk.gitsearch.service.dto.StatisticsDTO; import co.elastic.clients.elasticsearch.ElasticsearchClient; +import co.elastic.clients.elasticsearch._types.FieldSort; +import co.elastic.clients.elasticsearch._types.SortOptions; +import co.elastic.clients.elasticsearch._types.SortOrder; import co.elastic.clients.elasticsearch._types.query_dsl.BoolQuery; import co.elastic.clients.elasticsearch._types.query_dsl.ExistsQuery; import co.elastic.clients.elasticsearch._types.query_dsl.MatchPhrasePrefixQuery; @@ -565,7 +568,13 @@ public class MetaDataRepository { final BoolQuery query = queryBuilder.build(); // LOGGER.info("ElasticSearch Query using Java Client API:\n{}", query) co.elastic.clients.elasticsearch.core.SearchResponse<SearchResultDTO> searchResponse = elasticsearchAPIClient.search( - search -> search.index(SearchRepositoryConstants.INDEX_METADATA).query(q -> q.bool(query)).from(from).size(pageSize), + search -> + search + .index(SearchRepositoryConstants.INDEX_METADATA) + .query(q -> q.bool(query)) + .sort(getDefaultSortStrategy()) + .from(from) + .size(pageSize), SearchResultDTO.class ); @@ -583,6 +592,18 @@ public class MetaDataRepository { } } + private List<SortOptions> getDefaultSortStrategy() { + return List.of( + getSortOptionForFieldAndOrder(SearchRepositoryConstants.SEARCHSTATISTICS_BADGEREWARDED, SortOrder.Desc), + getSortOptionForFieldAndOrder(SearchRepositoryConstants.SEARCHSTATISTICS_DOWNLOADS, SortOrder.Desc), + getSortOptionForFieldAndOrder(SearchRepositoryConstants.SEARCHSTATISTICS_VIEWS, SortOrder.Desc) + ); + } + + private SortOptions getSortOptionForFieldAndOrder(String field, SortOrder order) { + return SortOptions.of(sb -> sb.field(FieldSort.of(fb -> fb.field(field).order(order)))); + } + /** * creates the query (builder) for the searchInput and the user authorization * diff --git a/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java b/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java index f907f768f..3fe6f2cba 100644 --- a/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java +++ b/src/main/java/at/ac/uibk/gitsearch/repository/search/SearchRepositoryConstants.java @@ -41,6 +41,10 @@ public final class SearchRepositoryConstants { public static final String PROJECT_GROUPS = "project.groups"; public static final String PROJECT_LASTACTIVITYAT = "project.last_activity_at"; + public static final String SEARCHSTATISTICS_VIEWS = "searchStatistics.views"; + public static final String SEARCHSTATISTICS_DOWNLOADS = "searchStatistics.downloads"; + public static final String SEARCHSTATISTICS_BADGEREWARDED = "searchStatistics.badgeRewarded"; + private SearchRepositoryConstants() { // just a list of constants } -- GitLab