You've got to think of what the queries will be that you produce under the bonnet - what you are talking about is either a (!func} or a {!frange} query - both of which are inefficient as they must scan the entire resultset.
However, what you're trying to do is evaluate the length of the *input value*, not a value in the documents being searched, so this doesn't really apply - you're talking about doing some work before your query happens. Again, I'm not sure of a way to do this on a stock Solr, but with a little coding it should be achievable - you could extend the switch query parser, or you could write your own - they're not that hard to create. Or, you could create a search component that operates before the QueryComponent does. A simple queryparser of your own would seem like a pretty lightweight thing - probably 20 lines of code or less. Upayavira On Fri, Jan 1, 2016, at 09:40 PM, William Bell wrote: > Forgot last bit: > > fq={!switch case.gt.0=$state1 > default=$state > func=len($state1)}</str> > > > On Fri, Jan 1, 2016 at 2:39 PM, William Bell <billnb...@gmail.com> wrote: > > > Maybe we can add function value on a switch? > > > > fq={!switch case.gt.0 > > default=$state > > func=len($state1)}</str> > > > > > > > > We could add: gt, lt, eq, ge, le ? > > > > gt: greater than > > lt: less than > > eq: equal > > ge: greater than or equal > > le: less than or equal > > > > ?? > > > > > > > > On Fri, Jan 1, 2016 at 2:25 PM, William Bell <billnb...@gmail.com> wrote: > > > >> This all started with me trying to use {!switch} to indicate with CO or > >> NY to use. if we pass state1, that is supposed to take precedence, but if > >> nothing is returned, then use state.... Make sense now? > >> > >> I could not find a way to check for strlen($state1). Which is what I want > >> in the case statement. This just does not work... > >> Something like the following is what I am trying to do: > >> > >> > >> fq={!switch case."anything"=$state1 > >> default=$state > >> v=$state1}</str> > >> > >> So I tried the following to set all 50 states: > >> > >> > >> fq={!switch case.all='*:*' > >> case.CO='state:CO' > >> case.NY='state:NY' > >> v=$state1}</str> > >> > >> > >> Obviously Oregon (OR!) is an issue, and it won't work at all plus > >> > >> > >> > >> On Fri, Jan 1, 2016 at 2:15 PM, William Bell <billnb...@gmail.com> wrote: > >> > >>> Another weirdness: > >>> > >>> > >>> http://localhost:8983/solr/providersearch/select?wt=json&state=state:CO&state1=state:NY&fl=*&q=*:*&tt=$state1&fq={!lucene%20v=$tt} > >>> <http://localhost:8983/solr/providersearch/select?wt=json&state=state:CO&state1=state:NY&fl=*&q=*:*&tt=$state1&fq=%7B!lucene%20v=$tt%7D> > >>> > >>> That does not return anything. > >>> > >>> But if I set v=$state1 I get results. > >>> > >>> Can I not set equivalent variables? > >>> > >>> > >>> > >>> On Fri, Jan 1, 2016 at 2:07 PM, William Bell <billnb...@gmail.com> > >>> wrote: > >>> > >>>> Example. > >>>> > >>>> > >>>> http://localhost:8983/solr/providersearch/select?wt=json&state=state:%22CO%22&state1=state:%22NY%22&fl=ss,score&q=*:*&fq={!lucene%20v=$state1} > >>>> <http://localhost:8983/solr/providersearch/select?wt=json&state=state:%22CO%22&state1=state:%22NY%22&fl=ss,score&q=*:*&fq=%7B!lucene%20v=$state1%7D> > >>>> > >>>> This return 236,000 > >>>> > >>>> > >>>> http://localhost:8983/solr/providersearch/select?wt=json&state=state:%22CO%22&state1=state:%22NY%22&fl=ss,score&q=*:*&fq={!lucene%20v=$state} > >>>> <http://localhost:8983/solr/providersearch/select?wt=json&state=state:%22CO%22&state1=state:%22NY%22&fl=ss,score&q=*:*&fq=%7B!lucene%20v=$state%7D> > >>>> > >>>> This returns 10,000 > >>>> > >>>> I want to put an IF statement around which v to use. > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> On Fri, Jan 1, 2016 at 1:52 PM, William Bell <billnb...@gmail.com> > >>>> wrote: > >>>> > >>>>> Sure. > >>>>> > >>>>> If the state:NY returns results filter by state:NY, if it does not, > >>>>> then use state:CO. If we have results in NY, use it, otherwise use CO. > >>>>> > >>>>> OK? > >>>>> > >>>>> On Fri, Jan 1, 2016 at 1:15 PM, Upayavira <u...@odoko.co.uk> wrote: > >>>>> > >>>>>> > >>>>>> > >>>>>> On Thu, Dec 31, 2015, at 11:50 PM, William Bell wrote: > >>>>>> > We are getting weird results with if(exists(a),b,c). We are getting > >>>>>> b+c!! > >>>>>> > > >>>>>> > > >>>>>> http://localhost:8983/solr/providersearch/select?q=*:*&wt=json&state=state:%22CO%22&state1=state:%22NY%22&fq=if(exists(query($state1)),{!lucene%20v=$state1},{!lucene%20v=$state}) > >>>>>> <http://localhost:8983/solr/providersearch/select?q=*:*&wt=json&state=state:%22CO%22&state1=state:%22NY%22&fq=if(exists(query($state1)),%7B!lucene%20v=$state1%7D,%7B!lucene%20v=$state%7D)> > >>>>>> > > >>>>>> > I am getting NY and CO! > >>>>>> > > >>>>>> > I only want $state1, which is NY. > >>>>>> > > >>>>>> > Any other ways to craft this? > >>>>>> > >>>>>> Does this work at all? > >>>>>> > >>>>>> The if() function is a function query that can be used to sort, boost > >>>>>> and as calculated fields. I haven't seen them used in filtering. > >>>>>> > >>>>>> Also, the query() function does *not* do a query, it just says "what > >>>>>> would this document score for this query?" > >>>>>> > >>>>>> Can you describe in English what you are trying to do? > >>>>>> > >>>>>> Upayavira > >>>>>> > >>>>> > >>>>> > >>>>> > >>>>> -- > >>>>> Bill Bell > >>>>> billnb...@gmail.com > >>>>> cell 720-256-8076 > >>>>> > >>>> > >>>> > >>>> > >>>> -- > >>>> Bill Bell > >>>> billnb...@gmail.com > >>>> cell 720-256-8076 > >>>> > >>> > >>> > >>> > >>> -- > >>> Bill Bell > >>> billnb...@gmail.com > >>> cell 720-256-8076 > >>> > >> > >> > >> > >> -- > >> Bill Bell > >> billnb...@gmail.com > >> cell 720-256-8076 > >> > > > > > > > > -- > > Bill Bell > > billnb...@gmail.com > > cell 720-256-8076 > > > > > > -- > Bill Bell > billnb...@gmail.com > cell 720-256-8076