Hoss Mann had posted the following on
a) CurrencyField (and by extension "CurrencyValue") gets my vote
b) i really only reviewed the facet stuff in
SOLR-2202-solr-10.patch (i know Jan has already been reviewing the more core stuff about the type) ... it makes me realize that we really need to refactor the range faceting code to be easier to do in custom FieldTypes, but that's certainly no fault of this issue and can be done later.
The facet code itself looks correct but my one concern is that (if i'm understanding all of this MoneyValue conversion stuff correctly) it should be possible to facet with start/end/gap values specified in any currency, as long as they are all consistent – but there is not test of this situation. the negative test only looks at using an inconsistent gap, and the positive tests only use USD, or the "default" which is also USD. We should have at least one test that uses something like EUR for start/end/gap and verifies that the counts are correct given the conversion rates used in the test.
incidentally: I don't see anything actually enforcing that start/end are in the same currency – just that gap is in the same currency as the values it's being added to, so essentially that start and gap use hte same currenty. But I'm actually not at all clear on why there is any attempt to enforce that the currencies used are the same, since the whole point of the type (as i understand it) is that you can do conversions on the fly – it may seem silly for someone to say facet.range.start=0,USD & facet.range.gap=200,EUR & facet.range.end=1000,YEN but is there any technical reason why we can't let them do that?