Quantcast

Using a function in a filter query

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Using a function in a filter query

Pete Smith-3

I want to filter my result set before I search. I know the correct way
to do this is by using the filter query (fq) parameter. However, I want
to filter based on the output of a function performed on a field.

I have a field 'rating' which is an integer in the range of 1 to ~75000.
The upper limit may change. I want to filter to the top 500 items with
the highest 'rating'. In SQL this would be something like:

... ORDER BY rating DESC LIMIT 500

I think I can get the documents in solr ranked by rating descending by
using the function rord(rating), so basically I would like to do:

fq=rord(rating):[0 TO 500]

But that does not seem possible. Does anyone know what else I could do?



--
Pete Smith
Senior Developer

No.9 | 6 Portal Way | London | W3 6RU |
T: +44 (0)20 8896 8070 | F: +44 (0)20 8896 8111

LOVEFiLM.com
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Using a function in a filter query

Yonik Seeley-2-2
On Mon, Apr 20, 2009 at 12:40 PM, Pete Smith <[hidden email]> wrote:
> fq=rord(rating):[0 TO 500]

Solr 1.4 can now do range queries on arbitrary functions:
http://lucene.apache.org/solr/api/org/apache/solr/search/FunctionRangeQParserPlugin.html

Note that ord() and rord() won't work properly in Solr 1.4 trunk.
Lucene has changed to searching per-segment in a MultiReader and hence
you will currently get the ord() or rord() in that segment, not in the
whole index.

-Yonik
http://www.lucidimagination.com
Loading...