- SFS instances are tread-safe. So, the same instance can be shared among many threads like IndexReader
- SFS should only be created when an IndexReader is opened/reopened. Creation with every search can be performance killer
- Iterating over the thousands of results(e.g, 1000 facets x 25 Hits per facet) can be too costly. The old trick can be used here too, "just show the hit counts, and make a new search when user clicks a category".
For each instance of SFS and search results:
MemUsage = (Document# in Index) / 8 * (Facet Count); // e.g, 1M docs & 1000 facets cost ~128MB (So, caching results of SFS searches may not be a good idea)
Thanks to DIGY and Ben West for working on this and putting this together for the community.