Support overriding sorts in events search type. (#18827)

This commit is contained in:
Dennis Oelkers
2024-03-28 12:33:12 +01:00
committed by GitHub
parent 9a3f9b6d79
commit 2fe91936c9
2 changed files with 20 additions and 8 deletions

View File

@@ -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<EventList> {
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<EventList> {
};
}
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<Map<String, Object>> extractResult(SearchResponse result) {
return StreamSupport.stream(result.getHits().spliterator(), false)
.map(SearchHit::getSourceAsMap)

View File

@@ -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<Map<String, Object>> extractResult(SearchResponse result) {
return StreamSupport.stream(result.getHits().spliterator(), false)
.map(SearchHit::getSourceAsMap)