Alex
Alex

Reputation: 83

How can I exclude scores that equal 0 in a Solr function query and maintain the actual score?

My goal is to round score to group similar items and then sort by another field (let's use price as an example).

I'm able to accomplish this with the following query:

/select?defType=func&q=rint(product(query({!v=the search term}),100))&fl=score,price&sort=score%20desc,price

However, this query returns every document indexed in Solr.

How can I filter this query so that items with a score of 0 are excluded?

I've tried adding {!frange l=1} to the query which kind of worked... but it made all of the scores equal to 1. This obviously isn't good because I need to show the most relevant results first.

Thanks in advance for any help.

Alex

Upvotes: 0

Views: 449

Answers (1)

helloparth
helloparth

Reputation: 61

I spent hours trying to filter out values with a relevance score of 0. I couldn't find any straight forward way to do this. I ended up accomplishing this with a workaround that assigns the query function to a local param. I call this local param in both the query ("q=") and the filter query ("fq=").

Example

Let's say you have a query like:

q={!func}sum(*your arguments*)

First, make the function component its own parameter:

q={!func}$localParam
&localParam={!func}sum(*your arguments*)

Now to only return results with scores between 1 and 10 simply add a filter query on that localParam:

q={!func}$localParam
&localParam={!func}sum(*your arguments*)
&fq={!frange l=1 u=10 inclusive=true}$localParam

Upvotes: 0

Related Questions