Yes, I am doing this right now.
The database trigger gathers up texts from various list fields and puts them all into a List of Tags field which is List of Texts. Not likely to run into List size issues.
For example we have a list of Topics and a List of Industries (which are option sets).
The user has both these fields. As does an Event.
The database trigger updates the list of tags on the User and Event. e.g. if the Event has Topics of Creative and Databases and Industries of Insurance and Banking then there would be a list of 4 text fields Creative, Database, Insurance, Banking
The User has the same field of Tags.
Each time an Event is created (again, it is a database trigger) I run a workflow that finds all the relevant users and for each User I schedule a Workflow for User and Event.
The workflow then does an Intersect of the User’s List of Tags and the Event’s List of Tags : Count
So if a user had the same tags as the Event I mentioned above, then the “score” is 4. But if another User had different Topics and Industries, they would get a score of 0.
So the table is User - Event matches
User - type User
Event - type Event
Score - number
Matching tags - list of texts (just there to work out what is happening really)
The user has a list -
List of Matching Events - Type User Event Matches (a list)
So now you can display a ranked list of Events by sorting the User’s List of Matching Events on Score Descending.
The only moderately complicated bit is that you need to check to see if the User and Event have already matched (so maybe someone updated the User or the Event tags) and update it if it exists or add a new one if not.
There is a separate workflow that runs when the user logs on, and it deletes any of the User’s Event matches that are past the date of the event.
You could do it with any two tables with lists of text tags (in fact we do it for many tables and lots of fields of text tags).