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 aa60a32e424e38d717ccae3cbc3ae96be1fd1789..0c58b6099079a6203109cd369d30086248296d53 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 f907f768fb5b0487507b0d376ecef38f7d53bfe0..3fe6f2cba967f71d44b2ec81b1e11aed6251560c 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 }