diff --git a/graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/ESEventList.java b/graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/ESEventList.java index 54fe4786fd..008f5e9e52 100644 --- a/graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/ESEventList.java +++ b/graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/searchtypes/ESEventList.java @@ -31,6 +31,7 @@ import org.graylog.shaded.elasticsearch7.org.elasticsearch.index.query.BoolQuery import org.graylog.shaded.elasticsearch7.org.elasticsearch.index.query.QueryBuilders; import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.SearchHit; import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.aggregations.Aggregations; +import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.sort.FieldSortBuilder; import org.graylog.shaded.elasticsearch7.org.elasticsearch.search.sort.SortOrder; import org.graylog.storage.elasticsearch7.views.ESGeneratedQueryContext; @@ -52,10 +53,8 @@ public class ESEventList implements ESSearchTypeHandler { public void doGenerateQueryPart(Query query, EventList eventList, ESGeneratedQueryContext queryContext) { final var searchSourceBuilder = queryContext.searchSourceBuilder(eventList); - final var sortConfig = eventList.sort() - .filter(sort -> EventList.KNOWN_ATTRIBUTES.contains(sort.field())) - .orElse(EventList.DEFAULT_SORT); - searchSourceBuilder.sort(sortConfig.field(), toSortOrder(sortConfig.direction())); + final FieldSortBuilder sortConfig = sortConfig(eventList); + searchSourceBuilder.sort(sortConfig); final var queryBuilder = searchSourceBuilder.query(); if (!eventList.attributes().isEmpty() && queryBuilder instanceof BoolQueryBuilder boolQueryBuilder) { final var filterQueries = eventList.attributes().stream() @@ -80,6 +79,13 @@ public class ESEventList implements ESSearchTypeHandler { }; } + protected FieldSortBuilder sortConfig(EventList eventList) { + final var sortConfig = eventList.sort() + .filter(sort -> EventList.KNOWN_ATTRIBUTES.contains(sort.field())) + .orElse(EventList.DEFAULT_SORT); + return new FieldSortBuilder(sortConfig.field()).order(toSortOrder(sortConfig.direction())); + } + protected List> extractResult(SearchResponse result) { return StreamSupport.stream(result.getHits().spliterator(), false) .map(SearchHit::getSourceAsMap) diff --git a/graylog-storage-opensearch2/src/main/java/org/graylog/storage/opensearch2/views/searchtypes/OSEventList.java b/graylog-storage-opensearch2/src/main/java/org/graylog/storage/opensearch2/views/searchtypes/OSEventList.java index fb6e5c766d..4184bf12b8 100644 --- a/graylog-storage-opensearch2/src/main/java/org/graylog/storage/opensearch2/views/searchtypes/OSEventList.java +++ b/graylog-storage-opensearch2/src/main/java/org/graylog/storage/opensearch2/views/searchtypes/OSEventList.java @@ -31,6 +31,7 @@ import org.graylog.shaded.opensearch2.org.opensearch.index.query.BoolQueryBuilde import org.graylog.shaded.opensearch2.org.opensearch.index.query.QueryBuilders; import org.graylog.shaded.opensearch2.org.opensearch.search.SearchHit; import org.graylog.shaded.opensearch2.org.opensearch.search.aggregations.Aggregations; +import org.graylog.shaded.opensearch2.org.opensearch.search.sort.FieldSortBuilder; import org.graylog.shaded.opensearch2.org.opensearch.search.sort.SortOrder; import org.graylog.storage.opensearch2.views.OSGeneratedQueryContext; @@ -52,10 +53,8 @@ public class OSEventList implements EventListStrategy { public void doGenerateQueryPart(Query query, EventList eventList, OSGeneratedQueryContext queryContext) { final var searchSourceBuilder = queryContext.searchSourceBuilder(eventList); - final var sortConfig = eventList.sort() - .filter(sort -> EventList.KNOWN_ATTRIBUTES.contains(sort.field())) - .orElse(EventList.DEFAULT_SORT); - searchSourceBuilder.sort(sortConfig.field(), toSortOrder(sortConfig.direction())); + final FieldSortBuilder sortConfig = sortConfig(eventList); + searchSourceBuilder.sort(sortConfig); final var queryBuilder = searchSourceBuilder.query(); if (!eventList.attributes().isEmpty() && queryBuilder instanceof BoolQueryBuilder boolQueryBuilder) { final var filterQueries = eventList.attributes().stream() @@ -80,6 +79,13 @@ public class OSEventList implements EventListStrategy { }; } + protected FieldSortBuilder sortConfig(EventList eventList) { + final var sortConfig = eventList.sort() + .filter(sort -> EventList.KNOWN_ATTRIBUTES.contains(sort.field())) + .orElse(EventList.DEFAULT_SORT); + return new FieldSortBuilder(sortConfig.field()).order(toSortOrder(sortConfig.direction())); + } + protected List> extractResult(SearchResponse result) { return StreamSupport.stream(result.getHits().spliterator(), false) .map(SearchHit::getSourceAsMap)