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

View File

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

View File

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

View File

@ -227,6 +227,16 @@ type SearchCardConfig {
showDescription: Boolean! 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 Variants of APIs used in the Search bar to get data
""" """
@ -333,6 +343,11 @@ type AppConfig {
""" """
searchCardConfig: SearchCardConfig! searchCardConfig: SearchCardConfig!
"""
Configurations related the Search Flags
"""
searchFlagsConfig: SearchFlagsConfig!
""" """
Feature flags telling the UI whether a feature is enabled or not 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 ViewsConfiguration mockViewsConfiguration;
@Mock private SearchBarConfiguration mockSearchBarConfiguration; @Mock private SearchBarConfiguration mockSearchBarConfiguration;
@Mock private SearchCardConfiguration mockSearchCardConfiguration; @Mock private SearchCardConfiguration mockSearchCardConfiguration;
@Mock private SearchFlagsConfiguration mockSearchFlagsConfiguration;
@Mock private HomePageConfiguration mockHomePageConfiguration; @Mock private HomePageConfiguration mockHomePageConfiguration;
@Mock private FeatureFlags mockFeatureFlags; @Mock private FeatureFlags mockFeatureFlags;
@Mock private ChromeExtensionConfiguration mockChromeExtensionConfiguration; @Mock private ChromeExtensionConfiguration mockChromeExtensionConfiguration;
@ -67,6 +68,7 @@ public class AppConfigResolverTest {
when(mockViewsConfiguration.isEnabled()).thenReturn(true); when(mockViewsConfiguration.isEnabled()).thenReturn(true);
when(mockSearchBarConfiguration.getApiVariant()).thenReturn("AUTOCOMPLETE_FOR_MULTIPLE"); when(mockSearchBarConfiguration.getApiVariant()).thenReturn("AUTOCOMPLETE_FOR_MULTIPLE");
when(mockSearchCardConfiguration.getShowDescription()).thenReturn(true); when(mockSearchCardConfiguration.getShowDescription()).thenReturn(true);
when(mockSearchFlagsConfiguration.getDefaultSkipHighlighting()).thenReturn(false);
when(mockHomePageConfiguration.getFirstInPersonalSidebar()).thenReturn("YOUR_ASSETS"); when(mockHomePageConfiguration.getFirstInPersonalSidebar()).thenReturn("YOUR_ASSETS");
when(mockChromeExtensionConfiguration.isEnabled()).thenReturn(false); when(mockChromeExtensionConfiguration.isEnabled()).thenReturn(false);
when(mockChromeExtensionConfiguration.isLineageEnabled()).thenReturn(false); when(mockChromeExtensionConfiguration.isLineageEnabled()).thenReturn(false);
@ -89,6 +91,7 @@ public class AppConfigResolverTest {
mockViewsConfiguration, mockViewsConfiguration,
mockSearchBarConfiguration, mockSearchBarConfiguration,
mockSearchCardConfiguration, mockSearchCardConfiguration,
mockSearchFlagsConfiguration,
mockHomePageConfiguration, mockHomePageConfiguration,
mockFeatureFlags, mockFeatureFlags,
mockChromeExtensionConfiguration, mockChromeExtensionConfiguration,
@ -189,6 +192,7 @@ public class AppConfigResolverTest {
mockViewsConfiguration, mockViewsConfiguration,
mockSearchBarConfiguration, mockSearchBarConfiguration,
mockSearchCardConfiguration, mockSearchCardConfiguration,
mockSearchFlagsConfiguration,
mockHomePageConfiguration, mockHomePageConfiguration,
mockFeatureFlags, mockFeatureFlags,
mockChromeExtensionConfiguration, mockChromeExtensionConfiguration,
@ -356,6 +360,7 @@ public class AppConfigResolverTest {
mockViewsConfiguration, mockViewsConfiguration,
mockSearchBarConfiguration, mockSearchBarConfiguration,
mockSearchCardConfiguration, mockSearchCardConfiguration,
mockSearchFlagsConfiguration,
mockHomePageConfiguration, mockHomePageConfiguration,
mockFeatureFlags, mockFeatureFlags,
mockChromeExtensionConfiguration, mockChromeExtensionConfiguration,
@ -386,6 +391,7 @@ public class AppConfigResolverTest {
mockViewsConfiguration, mockViewsConfiguration,
mockSearchBarConfiguration, mockSearchBarConfiguration,
mockSearchCardConfiguration, mockSearchCardConfiguration,
mockSearchFlagsConfiguration,
mockHomePageConfiguration, mockHomePageConfiguration,
mockFeatureFlags, mockFeatureFlags,
mockChromeExtensionConfiguration, mockChromeExtensionConfiguration,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -40,6 +40,9 @@ public class DataHubAppConfiguration {
/** Search card related configs */ /** Search card related configs */
private SearchCardConfiguration searchCard; private SearchCardConfiguration searchCard;
/** Search flags related configs */
private SearchFlagsConfiguration searchFlags;
/** Home page related configs */ /** Home page related configs */
private HomePageConfiguration homePage; 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: searchCard:
showDescription: ${SEARCH_CARD_SHOW_DESCRIPTION:false} showDescription: ${SEARCH_CARD_SHOW_DESCRIPTION:false}
searchFlags:
defaultSkipHighlighting: ${DEFAULT_SKIP_HIGHLIGHTING:false}
homePage: homePage:
firstInPersonalSidebar: ${FIRST_IN_PERSONAL_SIDEBAR:YOUR_ASSETS} firstInPersonalSidebar: ${FIRST_IN_PERSONAL_SIDEBAR:YOUR_ASSETS}

View File

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