Ah, so I was off base… sorry about that.
I get what you are saying now, and I can’t really think of a way to do it because sorting a repeating group on multiple number fields that may or may not be stored on the data type that is the data source for the repeating group would be difficult, if not impossible.
The above being said, here is something that comes to mind, and I will preface the following suggestion by saying it might be the worst idea ever. So, read/implement at your own peril, and bear with me on this one.
What if you had multiple list fields on the User
data type… a field for topics a user really likes, a field for topics they like, a field for topics they dislike, and a field for topics they really dislike. Then, you create a separate data type with a field that is tied to the option set and two number fields where a 1 will be stored in only one of the fields, depending on if the user likes or dislikes a topic.
As things are created in the new data type for the current user based upon them “registering” interest or disinterest in a topic, search through the data type and get like and dislike counts for the associated topic, and use those counts to move the topic between the aforementioned list fields on the User
data type based on count thresholds that determine the difference between really liking a topic, just liking it, just disliking it. or really disliking it.
Finally, set up the data source of the repeating group to merge searches in the order of really like, just like, just dislike, and really dislike, and you would have something similar to what you described… I think.
Again, all of the above could be downright awful, and I could definitely be overthinking it. If that is the case, I am sure someone will come along with a much better/simpler suggestion, at which point I could delete this post so as not to subject future readers to its awfulness. 