I'd love to know how Stack Overflow's tagging and search is architected, because it seems to work pretty well.
What is a good database/search model if I want to do all of the following:
- Storing Tags on various entities, (how normalized? i.e. Entity, Tag, and Entity_Tag tables?)
- Searching for items with particular tags
- Building a tag cloud of all tags that apply to a particular search result set
- How to show a tag list for each item in a search result?
Perhaps it makes sense to store the tags in a normalized form, but also as a space-delimited string for the purposes of #2, #4, and perhaps #3. Thoughts?
I have heard it said that Stack Overflow uses Lucene for search. Is that true? I've heard a couple of podcasts discussing SQL optimization, but nothing about Lucene. If they do use Lucene, I'm wondering how much of the search result comes from Lucene, and whether the "drill-down" tag cloud comes from Lucene.