Simon Bence created NIFI-7188:
---------------------------------

             Summary: Extending search capabilities with filters
                 Key: NIFI-7188
                 URL: https://issues.apache.org/jira/browse/NIFI-7188
             Project: Apache NiFi
          Issue Type: New Feature
          Components: Core UI
            Reporter: Simon Bence
            Assignee: Simon Bence


In my project, I do use relatively high number of processors and process 
groups. The current search function on the NiFi UI has no  capabilitites to 
narrow the results based on the group, which would make the results more 
relevant, so I would like to propose a possible solution. Please if you have 
any comment on this, do not hesitate to share it.

The general approach would be to keep the current text box and extend the 
server side capabilities to process search query in the similar manner for 
example the Google search behaves.This extensions I would call "filters". For 
now I am interested in the ones I will mention below, but I think, it is only a 
matter of small work for further extend the solution with further ones.

In order to distinguish the filters from the rest of the search query, I 
propose to put them at the beginning of the query and use the 
[a-zA-Z0-9\.]\{1..n}\:[a-zA-Z0-9\.]\{1..n} format. For example a filter might 
look the following: lorem:ipsum

Adding this, the search query should look like the following:

filter1:value filter2:value rest of the query

As for processing the filters, I suggest the following behaviour:

- Without filters the current behaviour should be kept
- Everything after the filters should be handled as the search term
- After the first "non filter word", anything should be considered as part of 
the search term (meaning: to keep the text parsing simple, I would not go in 
the direction to support filters at the end of the query, etc.)
- The ordering of the filters should have no effect on the result
- Filter duplications should be eliminated
- In case a filter appears multiple times in the query, the first occasion will 
be used
- Unknown filters should be ignored
- Only adding filters will not end up with result, at least one character must 
appear as search term

Suggested filters:

scope
Narrows the search based on the user's currently active process group. The 
allowed values are: "all" and "here". All produces the current behaviour, thus 
no filtering happens, but "here" should use the current process group as "root" 
of the search, ignoring everything else (including parent group). Note: This 
needs a minimal frontend change, because as I did see, currently the current 
group is not sent with the search query.

group
Narrows the search for a given processing group, if it exists. The behaviour is 
recursive, thus the result will include the contained groups as well. If it is 
a non-existing group, the result list should be empty.  Note: the filter does 
not look for full match but if the group name contains the filter value. This 
is needed to keep the "spaceless" format of the filters, as the group name 
might contain space. In a later point, we might add a more sophisticated query 
string processing, might parse strings between quotations.

properties
Controls if properties values are included or not. If not provided, the 
property values will be included. This is because in a lot of cases there is a 
huge number of results come from property names. 

- Valid values for inclusion: yes, true, include, 1
- Valid values for exclusion: no, none, false, exclude, 0

It is possible that the range of possible values should be limited (and not 
being ambiguous), but I see a merit of "permissiveness" here as it is simpler 
to remember.

Also some example:

1.
scope:here properties:exclude lorem ipsum
This should search only in the current group (and it's children), excluding 
properties and return with components containing the "lorem ipsum" expression.

2.
group:myGroup someQuery
This should result the finding of components with someQuery expression, but 
only within the myGroup group, even if it is not the active one.

3.
scope:all properties:include lorem
This should behave the same as "lorem" without filters.

As part of the feature development I plan to update the documentation with the 
new functionality.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to