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
     }