Dear Shawn, Thank you for the detailed explanation! Many users would need such guidelines about memory consumption (and performance trade-offs) for facets.
Thanks, Tomoko 2015-04-03 22:26 GMT+09:00 Shawn Heisey <apa...@elyograg.org>: > On 4/3/2015 6:53 AM, Tomoko Uchida wrote: > > According to line 430 in SImpleFacet.java (Solr 5.0.0), facet method is > > forced to "fc" when we set docValues=true. > > > https://github.com/apache/lucene-solr/blob/lucene_solr_5_0_0/solr/core/src/java/org/apache/solr/request/SimpleFacets.java#L430 > > > > So we need not set facet.method to use doc values. Even if we specify > > facet.method=enum, it might be ignored. > > If my understanding is wrong, please correct that. > > That code certainly looks like facet.method=enum is ignored when > docValues are present. > > As I understand it, the only disadvantage to facet.method=fc (when > docValues are not present) is that it uses a lot of heap memory in the > FieldCache (or whatever replaces FieldCache in 5.0). That memory > structure makes subsequent facets much faster, but on a large index, the > memory required can be astronomical. The enum method skips that > caching, relying on the operating system to cache the data in the index > itself. If there's enough memory for good OS caching, enum can be > almost as fast as fc, with a much smaller Java heap. > > On a field with docValues, the large memory structure is not required, > and an optimized code path is used. Based on the comment in the java > code that you highlighted, it sounds like only fc will do docValues, but > no handling is present for the fcs method with docValues, which would > seem to contradict that comment a little bit. > > Thanks, > Shawn > >