While I'm really fond of SQL for various things, I don't think your current table structure lends itself to good searching.
I see two potential approaches:
- Restructure your "keywords" table so it contains tuples of (user,keyword). If you have the appropriate indices, you can then search based on either user or keyword and find the "best" matches:
select
user, count(*) as hits
from ...
where keyword in ('Architect', 'Sydney', 'Small')
group by user
order by hits desc
- If you want a quick/better solution specialized for search, which already knows about (English) stemming etc., consider looking at ElasticSearch. I don't know how applicable it is for simple keyword search, but at least for documents a little bit larger, it seems to attract a lot of followers.