feat(ui/platform): Adds env variable to control default skipHighlighting search flag (#15038)

This commit is contained in:
Saketh Varma 2025-10-21 13:17:54 +05:30 committed by GitHub
parent 0f63e6d367
commit 27fca1c0bf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 69 additions and 2 deletions

View File

@ -433,6 +433,7 @@ public class GmsGraphQLEngine {
private final ViewsConfiguration viewsConfiguration;
private final SearchBarConfiguration searchBarConfiguration;
private final SearchCardConfiguration searchCardConfiguration;
private final SearchFlagsConfiguration searchFlagsConfiguration;
private final HomePageConfiguration homePageConfiguration;
private final ChromeExtensionConfiguration chromeExtensionConfiguration;
@ -570,6 +571,7 @@ public class GmsGraphQLEngine {
this.viewsConfiguration = args.viewsConfiguration;
this.searchBarConfiguration = args.searchBarConfiguration;
this.searchCardConfiguration = args.searchCardConfiguration;
this.searchFlagsConfiguration = args.searchFlagsConfiguration;
this.homePageConfiguration = args.homePageConfiguration;
this.featureFlags = args.featureFlags;
this.chromeExtensionConfiguration = args.chromeExtensionConfiguration;
@ -981,6 +983,7 @@ public class GmsGraphQLEngine {
this.viewsConfiguration,
this.searchBarConfiguration,
this.searchCardConfiguration,
this.searchFlagsConfiguration,
this.homePageConfiguration,
this.featureFlags,
this.chromeExtensionConfiguration,

View File

@ -71,6 +71,7 @@ public class GmsGraphQLEngineArgs {
ViewsConfiguration viewsConfiguration;
SearchBarConfiguration searchBarConfiguration;
SearchCardConfiguration searchCardConfiguration;
SearchFlagsConfiguration searchFlagsConfiguration;
HomePageConfiguration homePageConfiguration;
SiblingGraphService siblingGraphService;
GroupService groupService;

View File

@ -36,6 +36,7 @@ public class AppConfigResolver implements DataFetcher<CompletableFuture<AppConfi
private final ViewsConfiguration _viewsConfiguration;
private final SearchBarConfiguration _searchBarConfig;
private final SearchCardConfiguration _searchCardConfig;
private final SearchFlagsConfiguration _searchFlagsConfig;
private final HomePageConfiguration _homePageConfig;
private final FeatureFlags _featureFlags;
private final ChromeExtensionConfiguration _chromeExtensionConfiguration;
@ -55,6 +56,7 @@ public class AppConfigResolver implements DataFetcher<CompletableFuture<AppConfi
final ViewsConfiguration viewsConfiguration,
final SearchBarConfiguration searchBarConfig,
final SearchCardConfiguration searchCardConfig,
final SearchFlagsConfiguration searchFlagsConfig,
final HomePageConfiguration homePageConfig,
final FeatureFlags featureFlags,
final ChromeExtensionConfiguration chromeExtensionConfiguration,
@ -72,6 +74,7 @@ public class AppConfigResolver implements DataFetcher<CompletableFuture<AppConfi
_viewsConfiguration = viewsConfiguration;
_searchBarConfig = searchBarConfig;
_searchCardConfig = searchCardConfig;
_searchFlagsConfig = searchFlagsConfig;
_homePageConfig = homePageConfig;
_featureFlags = featureFlags;
_chromeExtensionConfiguration = chromeExtensionConfiguration;
@ -211,6 +214,10 @@ public class AppConfigResolver implements DataFetcher<CompletableFuture<AppConfi
searchCardConfig.setShowDescription(_searchCardConfig.getShowDescription());
appConfig.setSearchCardConfig(searchCardConfig);
final SearchFlagsConfig searchFlagsConfig = new SearchFlagsConfig();
searchFlagsConfig.setDefaultSkipHighlighting(_searchFlagsConfig.getDefaultSkipHighlighting());
appConfig.setSearchFlagsConfig(searchFlagsConfig);
final HomePageConfig homePageConfig = new HomePageConfig();
try {
homePageConfig.setFirstInPersonalSidebar(

View File

@ -227,6 +227,16 @@ type SearchCardConfig {
showDescription: Boolean!
}
"""
Configurations related the Search Flags
"""
type SearchFlagsConfig {
"""
Default value for skipHighlighting search flag. Currently used in Search Page and Search Bar
"""
defaultSkipHighlighting: Boolean!
}
"""
Variants of APIs used in the Search bar to get data
"""
@ -333,6 +343,11 @@ type AppConfig {
"""
searchCardConfig: SearchCardConfig!
"""
Configurations related the Search Flags
"""
searchFlagsConfig: SearchFlagsConfig!
"""
Feature flags telling the UI whether a feature is enabled or not
"""

View File

@ -39,6 +39,7 @@ public class AppConfigResolverTest {
@Mock private ViewsConfiguration mockViewsConfiguration;
@Mock private SearchBarConfiguration mockSearchBarConfiguration;
@Mock private SearchCardConfiguration mockSearchCardConfiguration;
@Mock private SearchFlagsConfiguration mockSearchFlagsConfiguration;
@Mock private HomePageConfiguration mockHomePageConfiguration;
@Mock private FeatureFlags mockFeatureFlags;
@Mock private ChromeExtensionConfiguration mockChromeExtensionConfiguration;
@ -67,6 +68,7 @@ public class AppConfigResolverTest {
when(mockViewsConfiguration.isEnabled()).thenReturn(true);
when(mockSearchBarConfiguration.getApiVariant()).thenReturn("AUTOCOMPLETE_FOR_MULTIPLE");
when(mockSearchCardConfiguration.getShowDescription()).thenReturn(true);
when(mockSearchFlagsConfiguration.getDefaultSkipHighlighting()).thenReturn(false);
when(mockHomePageConfiguration.getFirstInPersonalSidebar()).thenReturn("YOUR_ASSETS");
when(mockChromeExtensionConfiguration.isEnabled()).thenReturn(false);
when(mockChromeExtensionConfiguration.isLineageEnabled()).thenReturn(false);
@ -89,6 +91,7 @@ public class AppConfigResolverTest {
mockViewsConfiguration,
mockSearchBarConfiguration,
mockSearchCardConfiguration,
mockSearchFlagsConfiguration,
mockHomePageConfiguration,
mockFeatureFlags,
mockChromeExtensionConfiguration,
@ -189,6 +192,7 @@ public class AppConfigResolverTest {
mockViewsConfiguration,
mockSearchBarConfiguration,
mockSearchCardConfiguration,
mockSearchFlagsConfiguration,
mockHomePageConfiguration,
mockFeatureFlags,
mockChromeExtensionConfiguration,
@ -356,6 +360,7 @@ public class AppConfigResolverTest {
mockViewsConfiguration,
mockSearchBarConfiguration,
mockSearchCardConfiguration,
mockSearchFlagsConfiguration,
mockHomePageConfiguration,
mockFeatureFlags,
mockChromeExtensionConfiguration,
@ -386,6 +391,7 @@ public class AppConfigResolverTest {
mockViewsConfiguration,
mockSearchBarConfiguration,
mockSearchCardConfiguration,
mockSearchFlagsConfiguration,
mockHomePageConfiguration,
mockFeatureFlags,
mockChromeExtensionConfiguration,

View File

@ -31,6 +31,7 @@ import { getSearchCount } from '@app/searchV2/utils/searchUtils';
import { DownloadSearchResults, DownloadSearchResultsInput } from '@app/searchV2/utils/types';
import { useDownloadScrollAcrossEntitiesSearchResults } from '@app/searchV2/utils/useDownloadScrollAcrossEntitiesSearchResults';
import { scrollToTop } from '@app/shared/searchUtils';
import { useAppConfig } from '@app/useAppConfig';
import { SearchCfg } from '@src/conf';
import { useGetSearchResultsForMultipleQuery } from '@graphql/search.generated';
@ -48,6 +49,7 @@ const Container = styled.span`
*/
export const SearchPage = () => {
const { trackClearAllFiltersEvent } = useSearchFilterAnalytics();
const { config } = useAppConfig();
const showSearchFiltersV2 = useIsSearchV2();
const showBrowseV2 = useIsBrowseV2();
const searchVersion = useSearchVersion();
@ -77,7 +79,11 @@ export const SearchPage = () => {
orFilters,
viewUrn,
sortInput,
searchFlags: { getSuggestions: true, includeStructuredPropertyFacets: true },
searchFlags: {
getSuggestions: true,
includeStructuredPropertyFacets: true,
skipHighlighting: config?.searchFlagsConfig?.defaultSkipHighlighting || false,
},
},
},
fetchPolicy: 'cache-and-network',

View File

@ -75,6 +75,8 @@ const useAutocompleteAPI = (): APIResponse => {
};
const useSearchAPI = (): APIResponse => {
const { config } = useAppConfig();
const [entitiesWithMatchedFields, setEntitiesWithMatchedFields] = useState<EntityWithMatchedFields[] | undefined>();
const [facets, setFacets] = useState<FacetMetadata[] | undefined>();
@ -96,12 +98,15 @@ const useSearchAPI = (): APIResponse => {
viewUrn,
orFilters,
count: SEARCH_API_RESPONSE_MAX_ITEMS,
searchFlags: {
skipHighlighting: config?.searchFlagsConfig?.defaultSkipHighlighting || false,
},
},
},
});
}
},
[getSearchResultsForMultiple],
[getSearchResultsForMultiple, config?.searchFlagsConfig?.defaultSkipHighlighting],
);
useEffect(() => {

View File

@ -50,6 +50,9 @@ export const DEFAULT_APP_CONFIG = {
searchCardConfig: {
showDescription: false,
},
searchFlagsConfig: {
defaultSkipHighlighting: false,
},
homePageConfig: {
firstInPersonalSidebar: PersonalSidebarSection.YourAssets,
},

View File

@ -72,6 +72,9 @@ query appConfig {
searchCardConfig {
showDescription
}
searchFlagsConfig {
defaultSkipHighlighting
}
homePageConfig {
firstInPersonalSidebar
}

View File

@ -790,6 +790,7 @@ public class PropertiesCollectorConfigurationTest extends AbstractTestNGSpringCo
"platformAnalytics.usageExport.userFilters",
"searchBar.apiVariant",
"searchCard.showDescription",
"searchFlags.defaultSkipHighlighting",
"searchService.cache.hazelcast.serviceName",
"searchService.cache.hazelcast.service-dns-timeout",
"searchService.cache.hazelcast.kubernetes-api-retries",

View File

@ -40,6 +40,9 @@ public class DataHubAppConfiguration {
/** Search card related configs */
private SearchCardConfiguration searchCard;
/** Search flags related configs */
private SearchFlagsConfiguration searchFlags;
/** Home page related configs */
private HomePageConfiguration homePage;

View File

@ -0,0 +1,10 @@
package com.linkedin.metadata.config;
import lombok.Data;
/** POJO representing the "searchFlags" configuration block in application.yaml.on.yml */
@Data
public class SearchFlagsConfiguration {
/** Default value for skipHighlighing flag */
public Boolean defaultSkipHighlighting;
}

View File

@ -866,6 +866,9 @@ searchBar:
searchCard:
showDescription: ${SEARCH_CARD_SHOW_DESCRIPTION:false}
searchFlags:
defaultSkipHighlighting: ${DEFAULT_SKIP_HIGHLIGHTING:false}
homePage:
firstInPersonalSidebar: ${FIRST_IN_PERSONAL_SIDEBAR:YOUR_ASSETS}

View File

@ -261,6 +261,7 @@ public class GraphQLEngineFactory {
args.setViewsConfiguration(configProvider.getViews());
args.setSearchBarConfiguration(configProvider.getSearchBar());
args.setSearchCardConfiguration(configProvider.getSearchCard());
args.setSearchFlagsConfiguration(configProvider.getSearchFlags());
args.setHomePageConfiguration(configProvider.getHomePage());
args.setSiblingGraphService(siblingGraphService);
args.setGroupService(groupService);