while simple type:range facets don't benefit from refinement, because every shard returns the same set of buckets, some bugs currently exist when a range facet contains sub facets that use refinement:
- the optional other buckets (before/after/between) are not considered during refinement
- when using the include option: if edge is specified, then the refinement of all range buckets mistakenly includes the lower bound of the range, regardless of whether lower was specified.
#1 occurs because FacetRangeMerger extends FacetRequestSortedMerger<FacetRange> ... however FacetRangeMerger does not override getRefinement(...) which means only FacetRequestSortedMerger.buckets is evaluated and considered for refinement. The additional, special purpose, FacetBucket instances tracked in FacetRangeMerger are never considered for refinement.
#2 exists because of a mistaken in the implementation of refineBucket and how it computes the start value.