Question

Je cherche un moyen d'introduire un bruit aléatoire dans ma fonction de notation, et je ne sais pas comment procéder au mieux.

Quelques informations générales:

Nous utilisons Solr pour une application Web qui gère de grands ensembles de photos pour les agences.

Un client a une exigence intéressante pour la notation:

  • champ "qualité", géré par les éditeurs, de 1 (le plus élevé) à 3 (le plus bas);
  • champ "date", qui renforce les photos les plus récentes; J'utiliserais probablement une fonction logarithmique;

Cependant, en raison du fonctionnement du marché des photos de stock, cela entraînera probablement l'apparition de nombreuses photos similaires ensemble. Leur demande est de donner un grand coup de pouce à la «qualité», mais d'introduire un certain caractère aléatoire afin que les photos n'apparaissent pas dans un ordre de date strict.

Une idée?

MODIFIÉ: une exigence clé est d'avoir des résultats de requête "stables": si je recherche deux fois "île tropicale", je peux obtenir un ensemble de résultats légèrement différent, mais si je demande la première page, alors la deuxième, puis le d'abord, je ferais mieux d'obtenir les mêmes résultats :)

Était-ce utile?

La solution 2

En fait, ma première approche pour résoudre le problème était la bonne, et j'avais un bug d'implémentation trivial.Au cas où cela aiderait les autres:

RandomSortField a les caractéristiques dont j'ai besoin (c'est-à-dire renvoyer des résultats répétables pour la même requête). Laisser de côté la FunctionQuery pendant un moment, même quelque chose de trivial comme:

sort=quality_i asc, date_d desc, random_12345 desc

correspondra approximativement à mes besoins.

Cependant , lors de l'utilisation de la gemme rubis Sunspot, il n'y a aucun moyen de passer la graine, et c'est ce qui me trompait plus tôt: j'ai fini par utiliser une graine différente à chaque fois, devenant ainsi "vraie"résultats aléatoires.

Autres conseils

Vous pouvez le faire avec FunctionQueries .Pour chaque photo, ajoutez un champ avec un nombre aléatoire proche de 1 (par exemple 0,99, 1,02) et utilisez-le dans une requête de fonction de produit pour modifier le score "naturel".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top