diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/AggregateAcrossEntitiesResolver.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/AggregateAcrossEntitiesResolver.java index 4f54c949a7..783789c738 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/AggregateAcrossEntitiesResolver.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/AggregateAcrossEntitiesResolver.java @@ -20,6 +20,7 @@ import com.linkedin.metadata.service.ViewService; import com.linkedin.view.DataHubViewInfo; import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @@ -68,15 +69,21 @@ public class AggregateAcrossEntitiesResolver final List facets = input.getFacets() != null && input.getFacets().size() > 0 ? input.getFacets() : null; + List finalEntities = + maybeResolvedView != null + ? SearchUtils.intersectEntityTypes( + entityNames, maybeResolvedView.getDefinition().getEntityTypes()) + : entityNames; + if (finalEntities.size() == 0) { + return createEmptyAggregateResults(); + } + try { return mapAggregateResults( context, _entityClient.searchAcrossEntities( context.getOperationContext().withSearchFlags(flags -> searchFlags), - maybeResolvedView != null - ? SearchUtils.intersectEntityTypes( - entityNames, maybeResolvedView.getDefinition().getEntityTypes()) - : entityNames, + finalEntities, sanitizedQuery, maybeResolvedView != null ? SearchUtils.combineFilters( @@ -112,4 +119,10 @@ public class AggregateAcrossEntitiesResolver return results; } + + AggregateResults createEmptyAggregateResults() { + final AggregateResults result = new AggregateResults(); + result.setFacets(new ArrayList<>()); + return result; + } } diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchAcrossEntitiesResolver.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchAcrossEntitiesResolver.java index 31c11b9ac4..88e5dd0a94 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchAcrossEntitiesResolver.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchAcrossEntitiesResolver.java @@ -75,14 +75,20 @@ public class SearchAcrossEntitiesResolver implements DataFetcher finalEntities = + maybeResolvedView != null + ? SearchUtils.intersectEntityTypes( + entityNames, maybeResolvedView.getDefinition().getEntityTypes()) + : entityNames; + if (finalEntities.size() == 0) { + return SearchUtils.createEmptySearchResults(start, count); + } + return UrnSearchResultsMapper.map( context, _entityClient.searchAcrossEntities( context.getOperationContext().withSearchFlags(flags -> searchFlags), - maybeResolvedView != null - ? SearchUtils.intersectEntityTypes( - entityNames, maybeResolvedView.getDefinition().getEntityTypes()) - : entityNames, + finalEntities, sanitizedQuery, maybeResolvedView != null ? SearchUtils.combineFilters( diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchUtils.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchUtils.java index 0b298fd503..04777c3fcd 100644 --- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchUtils.java +++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchUtils.java @@ -21,6 +21,7 @@ import com.linkedin.common.urn.Urn; import com.linkedin.datahub.graphql.QueryContext; import com.linkedin.datahub.graphql.generated.EntityType; import com.linkedin.datahub.graphql.generated.FacetFilterInput; +import com.linkedin.datahub.graphql.generated.SearchResults; import com.linkedin.datahub.graphql.types.common.mappers.SearchFlagsInputMapper; import com.linkedin.datahub.graphql.types.entitytype.EntityTypeMapper; import com.linkedin.metadata.query.SearchFlags; @@ -314,4 +315,15 @@ public class SearchUtils { (inputTypes == null || inputTypes.isEmpty()) ? SEARCHABLE_ENTITY_TYPES : inputTypes; return entityTypes.stream().map(EntityTypeMapper::getName).collect(Collectors.toList()); } + + public static SearchResults createEmptySearchResults(final int start, final int count) { + final SearchResults result = new SearchResults(); + result.setStart(start); + result.setCount(count); + result.setTotal(0); + result.setSearchResults(new ArrayList<>()); + result.setSuggestions(new ArrayList<>()); + result.setFacets(new ArrayList<>()); + return result; + } }