fix(graphql) Fix entity type filter clash with legacy filters (#10362)

This commit is contained in:
Chris Collins 2024-04-29 09:57:47 -04:00 committed by GitHub
parent 8e5c0dc2d6
commit 1af050c730
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 39 additions and 8 deletions

View File

@ -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<String> facets =
input.getFacets() != null && input.getFacets().size() > 0 ? input.getFacets() : null;
List<String> 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;
}
}

View File

@ -75,14 +75,20 @@ public class SearchAcrossEntitiesResolver implements DataFetcher<CompletableFutu
start,
count);
List<String> 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(

View File

@ -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;
}
}