-----------------------------------------------------------
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
> 
>

Reply via email to