Tag-union implementation?

AI-generated summary

Tag-union Implementation Discussion

ebadgley initiated a discussion on implementing a tag union capability in Discourse, which would allow users to see topics with at least one of multiple specified tags. Currently, Discourse only supports tag intersections (AND) by default.

ebadgley proposed two possible solutions:

  1. Redirecting search results to the default category page.
  2. Creating a /tags/union/ route, possibly via a plugin.

sam revealed that a tag union route is already available in the form of https://meta.discourse.org/?tags[]=screen-reader&tags[]=accessibility, although it requires direct navigation to work due to Ember router limitations.

david suggested an alternative syntax using a space-separated list, e.g., https://meta.discourse.org/?tags=screen-reader+accessibility, which currently works but does not persist when selecting a category.

attj pointed out that this functionality does not work when selecting a category from the top left menu and requested a solution.

david acknowledged the limitation and mentioned that improving filtering and sorting of topic lists is a long-term goal for the Discourse team.

Continuing the discussion from Tags: category restrictions, tag groups, relationships:

I’m interested in building a tag union capability that would mimic how tag intersections are currently implemented (Tag intersections page): essentially the same result as intersections (the default category/Latest view), but doing an OR on multiple tags rather than an AND. I would appreciate any suggestions as a new Discourse developer.

My thoughts (so far) are as follows:

  • Searching on multiple tags via the search page essentially provides tag-union functionality (Does multiple tag search support AND vs OR?). The problem is that I don’t want the search results view – I want the default category page. Could search results be redirected to accomplish this?

  • If search results can’t be redirected, I’m open to attempting a /tags/union/ route (and have been looking into how intersection works). I would prefer to do this via plugin, but I am concerned that that is not something that could currently be accomplished via a plugin. Any suggestions here would be appreciated.

If there is sufficient user interest to add a tag-union capability into the Discourse core, I’d be willing to do it and submit a PR, but I’m hoping to find an alternative. Thanks in advance.

Not sure this counts as sufficient user interest, but intending to revive this discussion to see if users/team are interested.

Thoughts? @daniel

Has there been any updates on this? It would be very useful to have a /tags/union route.

We have it now at least in route form:

https://meta.discourse.org/?tags[]=screen-reader&tags[]=accessibility

Long term we are thinking of building a UI for cleaner filtering and sorting of topic lists.

I get an empty topic list when clicking the url provided:

Could there be a problem?

Yeah our Ember router needs to learn about this route (cc @david)

Will work if you directly navigate to the URL

Do I need to execute ./launcher rebuild app to have this update on my self hosted instance?

I would wait till we fix the client side routing

Building queryParam arrays using the paramName[] syntax is a backend-framework-specific thing, and I don’t think it’s supported natively by Ember. We might be able to make it work, but I just had a quick look at the server-side implementation of the tags filter and it looks like we also support a space-separated list.

So, this link should already work without a full page reload: https://meta.discourse.org/?tags=screen-reader+accessibility

This is very neat. However, the page does not keep the restrictions when a category is selected from top left. For pages with single tags, this works as expected.

For instance, If I am at /tag/tag1 and pick site-feedback from top left. It shows /tags/c/site-feedback/2/tag1.

With /?tags=tag1+tag2, it just redirects me to /c/site-feedback/2

Is it possible to have this functionality?

I guess this was requested in these two topics as well:

That kind of thing isn’t supported at the moment, but it’s something we’re thinking about improving in the long-term