How to implement facets in MoinMoin engine (sketchy)
See also: FacetedClassificationInMoin, FacetedNavigation, FacetBrowsingTheme, and FacetMap. Also, XFML and http://facetmap.com/.
First thoughts
We need to save meta data for each page (where?) and process this MetaData.
perhaps <data>/pages/<pagename>/metadata with the current storage layout? or just pragmas in the page text...
Facet data is very small - few facets, few values for each. Wikipedia might have little bigger facet information, but that would be no more then a big wiki page. It would never be big because too many facets and values are not useable, you will have to search for a value
- For long running moins (twisted/Fast CGI) we can have a in-memory meta data object, that get updated each time a page is saved/file attached etc - kind of a edit log. Using this object we can do all needed processing very fast. This object can be quite small - just few bits of data for each page. We need a way to save changes to the meta data database without saving all of it for each change, and without loading from disk for each request. We need some kind of Jornaling. If we crash, we build the meta data from the jornal.
- Primary problem I see here is that we need indices. Either we create them ourselfs or we use a (warning evil word ahead) database.
- For CGI this might be more difficult, maybe the CGI version will not do expensive stuff like showing how many page are in each facet value.
- just use the same cache as with long running moins and dump it as a pickle. saves reindexing which should eat the most time.
We can learn from http://www.kimbly.com/cgi-bin/diamond - tiny python wiki clone base on Pikie Pikie.