----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/75389/#review227324 -----------------------------------------------------------
agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java Lines 148 (patched) <https://reviews.apache.org/r/75389/#comment315570> I suggest changing following query-parameters: ``` public static final String IS_FULL_LABEL_MATCH = "isFullLabelMatch"; public static final String IS_FULL_KEYWORD_MATCH = "isFullKeywordMatch"; ``` to: ``` public static final String LABEL_MATCH_TYPE = "datasetLabelMatchType"; public static final String KEYWORD_MATCH_TYPE = "datasetKeywordMatchType"; ``` This will enable search to support various type of matches: full, partial, startsWith, endsWith. We can choose to support only full and partial match types in current patch. security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java Lines 255 (patched) <https://reviews.apache.org/r/75389/#comment315571> Query parameters can specify different matchTypes for label and keyword. This is not handled correctly here. I suggest updating #223 to #228 as shown below: ``` Set<String> searchLabels = extractFilterValues(SearchFilter.DATASET_LABEL, filter); Set<String> searchKeywords = extractFilterValues(SearchFilter.DATASET_KEYWORD, filter); String labelMatchType = filter.getParam(LABEL_MATCH_TYPE); String keywordMatchType = filter.getParam(KEYWORD_MATCH_TYPE); for (XXGdsDataset dataset : datasets) { boolean isLabelOrKeywordMatch = CollectionUtils.isEmpty(searchLabels) && CollectionUtils.isEmpty(searchKeywords); if (!isLabelOrKeywordMatch) { isLabelOrKeywordMatch = isAnyMatch(JsonUtils.jsonToSetString(dataset.Labels()), searchLables, labelMatchType); } if (!isLabelOrKeywordMatch) { isLabelOrKeywordMatch = isAnyMatch(JsonUtils.jsonToSetString(dataset.getKeywords()), searchKeywords, keywordMatchType)) { } if (isLabelOrKeywordMatch) { ret.getList().add(getPopulatedViewObject(dataset)); } } private static boolean isAnyMatch(Set<String> values, Set<String> searchStrings, String matchType) { if (isNotEmpty(values) && isNotEmpty(searchStrings)) { if (StringUtils.isEmpty(matchType) || matchType.equals("full")) { return searchStrings.stream().anyMatch(searchString -> values.stream().anyMatch(value -> value.equalsIgnoreCase(searchString))); } else { return searchStrings.stream().anyMatch(searchString -> values.stream().anyMatch(value -> StringUtils.containsIgnoreCase(value, searchString))); } } return false; } ``` - Madhan Neethiraj On May 22, 2025, 8:41 p.m., Radhika Kundam wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/75389/ > ----------------------------------------------------------- > > (Updated May 22, 2025, 8:41 p.m.) > > > Review request for ranger, Madhan Neethiraj and Ramesh Mani. > > > Bugs: RANGER-5213 > https://issues.apache.org/jira/browse/RANGER-5213 > > > Repository: ranger > > > Description > ------- > > Dataset Search and Summary APIs should support filtering by isEnabled and > Partial/Exact text search for Labels and Keywords. > Label and Keyword Filtering Enhancements > Partial Match (Existing Behavior - Performs a case-insensitive substring > search): > datasetLabel > datasetKeyword > > Exact/Full Match (New Behavior): > Query parameters introduced: > isFullLabelMatch=true > isFullKeywordMatch=true > > When these flags are set, the corresponding datasetLabel or datasetKeyword > values must match exactly(case-insensitive). > Without the flags, partial match remains the default. > > isEnabled Filter > New query parameter: isEnabled > Filters datasets based on their enabled/disabled status. > Only datasets with the specified status will be included in the results. > Example: isEnabled=true returns only enabled datasets. > > > Diffs > ----- > > agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java > 717b94c67 > security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java > a76c2b5a3 > security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java 84009c3fa > > security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java > 8ace32a53 > > > Diff: https://reviews.apache.org/r/75389/diff/2/ > > > Testing > ------- > > Tested locally > > > Thanks, > > Radhika Kundam > >