-
Notifications
You must be signed in to change notification settings - Fork 2.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Display additional object attributes in global search results #14134
Comments
But taking this to its logical conclusion, you could also render separate tables for each content type (i.e. Device, Site, VLAN etc) If you did this, then there would be no need for any separate The output would then look very similar to global search in older versions of Netbox. It wouldn't be quite so compact vertically, as you'd need a main heading and a row of column headings for each object type, but it would be better horizontally as you wouldn't need a "Type" column. |
That's not a viable solution, because results are now properly ordered by relevance (weight) rather than type. It's entirely possible, for example, to return some devices, then some sites, then more devices, then a circuit, and then more devices. Breaking these into separate tables would look terrible and be difficult to read, especially since each table would render separately with its own column widths. On top of that, it would preclude us from using the stock table rendering utilities: It would need to employ custom templating to manually start a new table each time the object type changes. |
This way it looks much better as for me. List of found objects can be really long but anyway there is some information to differentiate the objects. Another moment, now if we have match in description field NetBox show us quote from full description with pattern it has found. Is it possible to show us full description? |
option 1 sounds like a good step forward. it might additionally be nice if attributes that already have defined colors like "status" were rendered in the results with those colors (where the current screenshot has all attributes in grey bubbles) |
I do like this idea, I never made it further than option 2 or 3. The only thing I'm missing is a link to the object search page. For ex, I'm looking for 'test0', I see the devices that I want, but it depends on a custom field to choose the device I want to open. |
@PieterL75 where would you put that link? IMO there's no natural spot to place a single model-specific link, but maybe we could add a simple icon link in the object type column to direct users to the search for that specific type of object. |
…results (#14154) * WIP * Add display_attrs for all indexers * Linkify object attributes * Clean up prefetch logic * Use tooltips for display attributes * Simplify template code * Introduce get_indexer() utility function * Add to examples in docs * Use tooltips to display long strings
Guys, thank you for update. I've just installed it and made some searches. It looks great! |
NetBox version
v3.6.4
Feature type
Change to existing functionality
Proposed functionality
This FR proposes extending NetBox's global search feature to include certain additional object attributes when display global search results. (This does not impact model-specific filters.) Several extensions are necessary to implement this in a feasible manner.
1. Define display attributes on each SearchIndex class
The
display_attrs
attribute will define the additional attributes (if any) to include alongside search results. For example:This tells NetBox to also include the site, location, rack, and description for each global search result returning a device. Attributes will be included only if the object has a non-empty value for the specified field.
Although these attributes don't directly impact the search engine itself, IMO we should set them on the indexers (as opposed to the models) to maintain a clean API.
2. Extend search backend to support prefetching of display attributes
Prefetching related objects is necessary to ensure a reasonably performant implementation. Using the example above, each matching device would trigger up to three discrete SQL queries (on each for site, location, and device) without prefetching enabled. (This is necessary only for related objects: Concrete fields will have already been populated while retrieving the object associated with each result.)
We should be able to employ Django's
prefetch_related_objects()
utility function to attach prefetched objects to the results list after it has been retrieved. However, because global search results are heterogeneous, we must manually attach prefetched objects per result type. This will require callingprefetch_related_objects()
on subsets of the results list organized by content type.3. Determine how to display the additional attributes
Assuming we can efficiently retrieve the attributes, we still need to determine the best way to incorporate them into the search results. I see several options:
There are pros and cons to each approach, however I don't consider option 3 truly viable, as it could generate very large tables when many types of objects are returned, and would be very difficult for the user to read. Option 1 (shown above) is probably the simplest.
Use case
These attributes are intended to convey additional context to the user where readily distinguishing between similar search results may be difficult. For example, multiple results might each reference a "VLAN 100," each of which is assigned to a different site. This enhancement provides the context necessary for the user to see the site to which each VLAN is assigned without needing to navigate to each object individually.
Database changes
I don't believe any changes to the database schema are necessary to support this functionality. We probably won't even need to trigger a re-indexing of cached values.
External dependencies
None
The text was updated successfully, but these errors were encountered: