fix(filters) Fix autocomplete for platforms and improve advanced search builder (#12560)

This commit is contained in:
Chris Collins 2025-02-24 17:29:29 -05:00 committed by GitHub
parent 8dfd8fbbaf
commit 610e5a899e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -2,15 +2,26 @@ package com.linkedin.datahub.graphql.types.dataplatform;
import static com.linkedin.metadata.Constants.*; import static com.linkedin.metadata.Constants.*;
import com.google.common.collect.ImmutableSet;
import com.linkedin.common.urn.Urn; import com.linkedin.common.urn.Urn;
import com.linkedin.common.urn.UrnUtils; import com.linkedin.common.urn.UrnUtils;
import com.linkedin.datahub.graphql.QueryContext; import com.linkedin.datahub.graphql.QueryContext;
import com.linkedin.datahub.graphql.generated.AutoCompleteResults;
import com.linkedin.datahub.graphql.generated.DataPlatform; import com.linkedin.datahub.graphql.generated.DataPlatform;
import com.linkedin.datahub.graphql.generated.Entity; import com.linkedin.datahub.graphql.generated.Entity;
import com.linkedin.datahub.graphql.generated.FacetFilterInput;
import com.linkedin.datahub.graphql.generated.SearchResults;
import com.linkedin.datahub.graphql.resolvers.ResolverUtils;
import com.linkedin.datahub.graphql.types.EntityType; import com.linkedin.datahub.graphql.types.EntityType;
import com.linkedin.datahub.graphql.types.SearchableEntityType;
import com.linkedin.datahub.graphql.types.dataplatform.mappers.DataPlatformMapper; import com.linkedin.datahub.graphql.types.dataplatform.mappers.DataPlatformMapper;
import com.linkedin.datahub.graphql.types.mappers.AutoCompleteResultsMapper;
import com.linkedin.datahub.graphql.types.mappers.UrnSearchResultsMapper;
import com.linkedin.entity.EntityResponse; import com.linkedin.entity.EntityResponse;
import com.linkedin.entity.client.EntityClient; import com.linkedin.entity.client.EntityClient;
import com.linkedin.metadata.query.AutoCompleteResult;
import com.linkedin.metadata.query.filter.Filter;
import com.linkedin.metadata.search.SearchResult;
import graphql.execution.DataFetcherResult; import graphql.execution.DataFetcherResult;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
@ -18,8 +29,11 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class DataPlatformType implements EntityType<DataPlatform, String> { public class DataPlatformType
implements SearchableEntityType<DataPlatform, String>, EntityType<DataPlatform, String> {
private final EntityClient _entityClient; private final EntityClient _entityClient;
@ -75,4 +89,39 @@ public class DataPlatformType implements EntityType<DataPlatform, String> {
public Function<Entity, String> getKeyProvider() { public Function<Entity, String> getKeyProvider() {
return Entity::getUrn; return Entity::getUrn;
} }
@Override
public SearchResults search(
@Nonnull String query,
@Nullable List<FacetFilterInput> filters,
int start,
int count,
@Nonnull final QueryContext context)
throws Exception {
final Map<String, String> facetFilters =
ResolverUtils.buildFacetFilters(filters, ImmutableSet.of());
final SearchResult searchResult =
_entityClient.search(
context.getOperationContext().withSearchFlags(flags -> flags.setFulltext(true)),
DATA_PLATFORM_ENTITY_NAME,
query,
facetFilters,
start,
count);
return UrnSearchResultsMapper.map(context, searchResult);
}
@Override
public AutoCompleteResults autoComplete(
@Nonnull String query,
@Nullable String field,
@Nullable Filter filters,
int limit,
@Nonnull final QueryContext context)
throws Exception {
final AutoCompleteResult result =
_entityClient.autoComplete(
context.getOperationContext(), DATA_PLATFORM_ENTITY_NAME, query, filters, limit);
return AutoCompleteResultsMapper.map(context, result);
}
} }