Hi Yonik, Thanks for the technical explanation. I will in general try to use lex and sort by count in the client if there are not too many rows.
Have a nice day. Regards ericz On Wed, Aug 25, 2010 at 4:41 PM, Yonik Seeley <yo...@lucidimagination.com>wrote: > On Wed, Aug 25, 2010 at 10:07 AM, Eric Grobler > <impalah...@googlemail.com> wrote: > > I use Solr 1.41 > > There are 14000 cities in the index. > > The type is just a simple string: <fieldType name="string" > > class="solr.StrField" sortMissingLast="true" omitNorms="true"/> > > The facet method is fc. > > > > You are right I do not need 5000 cities, I was just surprised to see this > > big difference, there are places where I do need to sort count and return > > about 500 items. > > > > If Solr was also slow in locating the highest count city it would be less > > surprising. > > In other words, if I set the limit to 1, then solr returns Berlin as the > > city with the highest count within 3ms which seems to indicate that the > > facet is internally sorted by count. > > However, the speed regresses linearly, 30ms for 10, 300ms for 1000 etc. > > The priority queue collecting values will be larger of course, but in > this specific instance I bet most of the time is being taken up in > converting from term number to term value. Here's a snippet of a > comment from the implementation: > * To further save memory, the terms (the actual string values) are > not all stored in > * memory, but a TermIndex is used to convert term numbers to term values > only > * for the terms needed after faceting has completed. Only every > 128th term value > * is stored, along with it's corresponding term number, and this is > used as an > * index to find the closest term and iterate until the desired > number is hit (very > * much like Lucene's own internal term index). > > This is something that Lucene has improved in trunk, and that solr can > make improvements to also. > Besides optimizations, we could also implement options to store all > values and eliminate the need to read the index to do the ord->string > conversions. > > -Yonik > http://lucenerevolution.org Lucene/Solr Conference, Boston Oct 7-8 > > > > Regards > > Eric > > > > On Wed, Aug 25, 2010 at 3:28 PM, Yonik Seeley < > yo...@lucidimagination.com> > > wrote: > >> > >> On Wed, Aug 25, 2010 at 7:22 AM, Eric Grobler < > impalah...@googlemail.com> > >> wrote: > >> > There is a huge difference doing facet sorting on lex vs count > >> > The strange thing is that count sorting is fast when setting a small > >> > limit. > >> > I realize I can do sorting in the client, but I am just curious why > this > >> > is. > >> > >> There are a lot of optimizations to make things fast for the common > >> case - and setting a really high limit makes some of those > >> ineffective. Hopefully you don't really need to return the top 5000 > >> cities? > >> What version of Solr is this? What faceting method is used? Is this a > >> multi-valued field? How many unique values are in the city field? > >> How many docs in the index? > >> > >> -Yonik > >> http://lucenerevolution.org Lucene/Solr Conference, Boston Oct 7-8 > >> > >> > >> > FAST - 16ms > >> > facet.field=city > >> > f.city.facet.limit=5000 > >> > f.city.facet.sort=lex > >> > > >> > FAST - 20 ms > >> > facet.field=city > >> > f.city.facet.limit=50 > >> > f.city.facet.sort=count > >> > > >> > SLOW - over 1 second > >> > facet.field=city > >> > f.city.facet.limit=5000 > >> > f.city.facet.sort=count > >> > > >> > Regards > >> > ericz > >> > > > > > >