Thanks Hoss,

I will give those a try and let you know.

Cheers.

On Wed, Nov 23, 2011 at 8:35 PM, Chris Hostetter
<hossman_luc...@fucit.org>wrote:

>
> : Which answers my query needs. BUT, my boost function actually changes
> some
> : of the results to be of score 0, which I want to be excluded from the
> : result set.
>
> Ok .. so the crux of the issue is that your boost function results in a
> value of 0 for some documents, and you would like those documents excluded
> from your results...
>
>        eqsim(alltokens,"xyz")
>
> "eqsim" is not a function thta ships with Solr (as far as i know) so i'm
> guessing it's something custom .. can you clarify what it does?
>
> : 2) This is why I used the frange query to solve the issue with the score
> 0:
> : q={!frange l=0 incl=false}query({!type=edismax qf="abstract^0.02
> title^0.08
> : categorysearch^0.05" boost='eqsim(alltokens,"xyz")' v='+tokens5:"xyz" '})
> :
> : But this time, the remaining results lost their *boosted* scores, and
> : therefore the sort by score got all mixed up.
>
> correct: frange produces a ConstantScoreQuery, it can only be used to
> filter documents based on wether the function it wraps falls in/out of the
> range.
>
> : 3) I assume I can use filter queries, but from my understanding FQs
> : actually perform another query before the main one and these queries are
> : expensive in time and I would like to avoid it if possible.
>
> Unless you actaully see notisable performance problems I wouldn't assume
> it will be an issue -- test first, get it working, then optimize if it's
> too slow.  For most people the overhead of the "fq" won't a factor.
>
> One option you might consider is the "cache=false" local param which tells
> Solr not to cache the fq (handy if you know the query you are
> filtering on is not going to be reused much) and since it's not being
> cached, Solr will execute it in parallel with the main query and ignore
> anything that it already knows isn't going to matter in the final query.
>
> In your case however, you can already "optimize" the fq solution a bit
> because what you really need to filter out isn't documents matching your
> main query with a score less then zero; that set is the same as the set of
> documents for whom your "eqsim" function returns 0, so you can just use
> *that* in your fq.  Something like this should work...
>
>        q={!edismax ... boost=$eqsim}
>        fq={!frange l=0 incl=false v=$eqsim}
>        eqsim=eqsim(alltokens,"xyz")
>
> ...but there may still be ways to clean that up and make it faster
> depending on what exactly your "eqsim" function does (ie: there may be a
> simple query that can be faster then that "frange" to identify the docs
> that get non-zero values from that function.
>
> -Hoss
>

Reply via email to