2009-04-20 10 views
1

Je souhaite filtrer mon jeu de résultats avant de lancer une recherche. Je sais que la façon correcte de le faire est d'utiliser le paramètre de requête de filtre (fq). Cependant, je veux filtrer en fonction de la sortie d'une fonction effectuée sur un champ.Utilisation d'une fonction dans une requête de filtre dans Solr

J'ai un champ 'rating' qui est un entier compris entre 1 et 75000. La limite supérieure peut changer. Je veux filtrer vers le top 500 des articles avec le 'rating' le plus élevé. Dans SQL ce serait quelque chose comme:

... ORDER BY rating DESC LIMIT 500 

Je pense que je peux obtenir les documents solr classés par notes descendant en utilisant la fonction Rord (note), donc en gros je voudrais faire:

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

Mais cela ne semble pas possible. Est-ce que quelqu'un sait ce que je pourrais faire d'autre?

Répondre

3

Merci à Yonik Seeley sur la liste de diffusion Solr:

Solr 1.4 peut maintenant faire des requêtes de gamme sur fonctions arbitraires: http://lucene.apache.org/solr/api/org/apache/solr/search/FunctionRangeQParserPlugin.html

Notez que ord() et Rord() NUL travailler correctement dans le coffre Solr 1.4. Lucene a changé à la recherche par segment dans un MultiReader et donc obtiendrez actuellement l'ord() ou le rord() dans ce segment, pas dans l'index entier.

1

À moins que je ne manque quelque chose, vous ne pouvez pas trier par le champ de notation, puis prenez simplement le premier 500. Ce serait identique à votre exemple SQL.

+0

Je ne peux pas limiter les réponses à 500 car a. Cela enlèverait le point de pagination; et B. Je veux lancer une requête de filtre afin que je puisse faire une facette dans les 500 documents. – cubabit

Questions connexes