Flatter please. The other nested stuff makes my head hurt. Until recently I thought I was the only person on the planet who had a hard time mentally parsing anything but the simplest JSON, but then I learned that I'm not alone at all.... it's just that nobody is saying it. :)
Otis -- Monitoring * Alerting * Anomaly Detection * Centralized Log Management Solr & Elasticsearch Support * http://sematext.com/ On Fri, Apr 17, 2015 at 7:26 PM, Trey Grainger <solrt...@gmail.com> wrote: > Agreed, I also prefer the second way. I find it more readible, less verbose > while communicating the same information, less confusing to mentally parse > ("is 'terms' the name of my facet, or the type of my facet?..."), and less > prone to syntactlcally valid, but logically invalid inputs. Let's break > those topics down. > > *1) Less verbose while communicating the same information:* > The flatter structure is particularly useful when you have nested facets to > reduce unnecessary verbosity / extra levels. Let's contrast the two > approaches with just 2 levels of subfacets: > > ** Current Format ** > top_genres:{ > terms:{ > field: genre, > limit: 5, > facet:{ > top_authors:{ > terms:{ > field: author, > limit: 4, > facet: { > top_books:{ > terms:{ > field: title, > limit: 5 > } > } > } > } > } > } > } > } > > ** Flat Format ** > top_genres:{ > type: terms, > field: genre, > limit: 5, > facet:{ > top_authors:{ > type: terms > field: author, > limit: 4, > facet: { > top_books:{ > type: terms > field: title, > limit: 5 > } > } > } > } > } > > The flat format is clearly shorter and more succinct, while communicating > the same information. What value do the extra levels add? > > > *2) Less confusing to mentally parse* > I also find the flatter structure less confusing, as I'm consistently > having to take a mental pause with the current format to verify whether > "terms" is the name of my facet or the type of my facet and have to count > the curly braces to figure this out. Not that I would name my facets like > this, but to give an extreme example of why that extra mental calculation > is necessary due to the name of an attribute in the structure being able to > represent both a facet name and facet type: > > terms: { > terms: { > field: genre, > limit: 5, > facet: { > terms: { > terms:{ > field: author > limit: 4 > } > } > } > } > } > > In this example, the first "terms" is a facet name, the second "terms" is a > facet type, the third is a facet name, etc. Even if you don't name your > facets like this, it still requires parsing someone else's query mentally > to ensure that's not what was done. > > 3) *Less prone to syntactically valid, but logically invalid inputs* > Also, given this first format (where the type is indicated by one of > several possible attributes: terms, range, etc.), what happens if I pass in > multiple of the valid JSON attributes... the flatter structure prevents > this from being possible (which is a good thing!): > > top_authors : { > terms : { > field : author, > limit : 5 > }, > range : { > field : price, > start : 0, > end : 100, > gap : 20 > } > } > > I don't think the response format can currently handle this without adding > in extra levels to make it look like the input side, so this is an > exception case even thought it seems syntactically valid. > > So in conclusion, I'd give a strong vote to the flatter structure. Can > someone enumerate the benefits of the current format over the flatter > structure (I'm probably dense and just failing to see them currently)? > > Thanks, > > -Trey > > > On Fri, Apr 17, 2015 at 2:28 PM, Jean-Sebastien Vachon < > jean-sebastien.vac...@wantedanalytics.com> wrote: > > > I prefer the second way. I find it more readable and shorter. > > > > Thanks for making Solr even better ;) > > > > ________________________________________ > > From: Yonik Seeley <ysee...@gmail.com> > > Sent: Friday, April 17, 2015 12:20 PM > > To: solr-user@lucene.apache.org > > Subject: Re: JSON Facet & Analytics API in Solr 5.1 > > > > Does anyone have any thoughts on the current general structure of JSON > > facets? > > The current general form of a facet command is: > > > > <facet_name> : { <facet_type> : <facet_args> } > > > > For example: > > > > top_authors : { terms : { > > field : author, > > limit : 5, > > }} > > > > One alternative I considered in the past is having the type in the args: > > > > top_authors : { > > type : terms, > > field : author, > > limit : 5 > > } > > > > It's a flatter structure... probably better in some ways, but worse in > > other ways. > > Thoughts / preferences? > > > > -Yonik > > > > > > On Tue, Apr 14, 2015 at 4:30 PM, Yonik Seeley <ysee...@gmail.com> wrote: > > > Folks, there's a new JSON Facet API in the just released Solr 5.1 > > > (actually, a new facet module under the covers too). > > > > > > It's marked as experimental so we have time to change the API based on > > > your feedback. So let us know what you like, what you would change, > > > what's missing, or any other ideas you may have! > > > > > > I've just started the documentation for the reference guide (on our > > > confluence wiki), so for now the best doc is on my blog: > > > > > > http://yonik.com/json-facet-api/ > > > http://yonik.com/solr-facet-functions/ > > > http://yonik.com/solr-subfacets/ > > > > > > I'll also be hanging out more on the #solr-dev IRC channel on freenode > > > if you want to hit me up there about any development ideas. > > > > > > -Yonik > > >