Search does not seem to work for tags with emoji

AI-generated summary

A user, arnaud_sahuguet, reported an issue with search functionality on the forum, specifically with tags containing emojis. The search does not return topics correctly when using tags with emojis.

joffreyjaffeux identified the problem being the regex used in search.rb does not allow emojis. A possible solution is to use a dedicated emoji regex, such as ruby-emoji-regex.

sam expressed concerns about supporting this edge case, while joffreyjaffeux pointed out that there is no validating regex for the Tag class. neil suggested looking into supporting this in version 2.5, as there are no tests for emoji tag names.

lucasbasquerotto further investigated the issue and found that search works partially when using only the tag or with certain keywords, but not with the expected topic.

I have tags that contain emojis, e.g. new-york-city-🇺🇸.
When using the search and advanced search, I don’t get the topics.

Here is an example:
Query:
https://urbantech-forum.cornelltech.io/search?expanded=true&q=tags%3Anew-york-city-🇺🇸subway

And here is a topic that should be returned:
https://urbantech-forum.cornelltech.io/t/subway-accessibility-info-and-elevator-escalator-status-alerts/139

1 Like

Not sure if this is resolvable, what is your take @neil?

AFAIK it’s only because the regex we have here:

is not allowing emojis. If this was matching on emoji, it would work after.

We might want to consider using something like: GitHub - ticky/ruby-emoji-regex: 💎 A set of Ruby regular expressions for matching Unicode Emoji symbols. · GitHub to have a good emoji regex.

what do you think @sam ?

1 Like

Oh my, this feels like one big monster to support for a major edge case, do we already have a validating regex on the Tag class?

1 Like

I don’t think we do, might be wrong though @neil probably knows better
AFAIK we just have this clean_tag function:

Which is kinda copied in client side here:

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/select-kit/mixins/tags.js.es6#L80

Also this would probably be useful at other places as we for example generate this client side: https://github.com/discourse/discourse/blob/master/app/assets/javascripts/pretty-text/emoji.js.es6#L24

2 Likes

I doubt that we have any tests for emoji tag names. Maybe we can look into supporting this in 2.5?

4 Likes

I see that the search returns only one topic when using only the tag (without the subway keyword) in the search (it’s not the topic posted in the OP):

https://urbantech-forum.cornelltech.io/search?expanded=true&q=tags%3Anew-york-city-🇺🇸

It also works with other keywords (but only for that topic returned previously):

https://urbantech-forum.cornelltech.io/search?expanded=true&q=tags%3Anew-york-city-🇺🇸%20personal

If I don’t use tags it returns correctly:

https://urbantech-forum.cornelltech.io/search?expanded=true&q=new-york-city-🇺🇸

The topic returned previously, with the tag, is the 1st returned using a keyword with the tag name, but the post is another (but it might just be because of (maybe) a metadata or something like this in the post that is caught by the search, and not the tag itself, but I can’t say for sure).