lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Upayavira ...@odoko.co.uk>
Subject Re: Issue with if() statement
Date Fri, 01 Jan 2016 21:20:50 GMT
I'm afraid I cannot see how this can be done - at least without coding.

Basically, when your filter is being evaluated, you want to make use of
knowledge of the main query - for normal queries, that isn't possible,
as they are created independently.

You could use potentially use a "post filter" in which the final set of
documents are passed through a filter - but even then, you wouldn't know
how *why* a document matched, only that it did. So really, you're gonna
need to do this as two queries - one to find out the number of docs
matching your state, and then send a second query based upon that.

With some coding, you could probably get that to be a single request to
Solr, but it is going to remain two queries against the index.

Upayavira



On Fri, Jan 1, 2016, at 09:07 PM, William Bell 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}
> 
> 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}
> 
> 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 <billnbell@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 <uv@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
> > billnbell@gmail.com
> > cell 720-256-8076
> >
> 
> 
> 
> -- 
> Bill Bell
> billnbell@gmail.com
> cell 720-256-8076

Mime
View raw message