I've been looking at <http://wiki.apache.org/solr/UserTagDesign> on and off for a while and think all the use cases could be explained with simple UML class diagram semantics:

[Taggable](tag:Tag)-- {0..*} ----|--- {0..*} --(tag:Tag)[Tagger]

                                 |
                             [Tagging]

Rendered: <http://ginandtonique.org/~kalle/tagging.pdf>

This is of course a design that might not fit everybody, it could be represented using an n-ary association or what not. But I find the text on the wiki much easier to follow with this in my head.

How (or even if) one would represent this in a index is a completely different story.

Translated to Java the diagram would look something like this:

/** the user */
class Tagger {
  Map<Tag, Set<Tagging>> taggingsByTag;
}

/** the content */
class Taggable {
  Map<Tag, Set <Tagging>> taggingsByTag;
}

/** content tagging */
class Tagging {
  Tagger tagger;
  Taggable tagged;
  Date created;
}

class Tag {
  String text;
}

Thought it was better to let you people decide whether or not this fits in the wiki.


--
karl


Reply via email to