2011-01-15 3 views
4

J'ai donc implémenté et utilisé avec succès Solr 4. Je dois dire que Solr 4 est génial! Quoi qu'il en soit, j'ai trié avec succès par distance et utilisé un géofiltre pour limiter les résultats à une certaine zone. Ce que je voudrais faire maintenant, c'est augmenter le score de pertinence par l'inverse de la distance. Cette page parle mais ne dit pas comment le faire (http://wiki.apache.org/solr/SpatialSearch)Comment augmenter le score de pertinence de Solr par l'inverse de geodist()

J'ai essayé ce qui suit, mais il me donne une erreur:

http://localhost:8983/solr/select/?q={!boost b=recip(geodist(), 1, 1000, 1000)}...

L'erreur que je reçois est:

org.apache.lucene.queryParser.ParseException: Expected identifier at pos 27 str='{!boost b=recip(geodist(), 1, 10 in ...

Toute aide serait appréciée. Merci!

+1

http://wiki.apache.org/solr/SpatialSearch#How_to_boost_closest_results –

Répondre

11

Vous devez toujours spécifier la partie principale de votre requête après la fonction boost:

q={!boost b=recip(geodist(),1,1000,1000)}foo:bar&... 

Si vous êtes uniquement intéressé à stimuler par l'inverse de la distance que vous pouvez utiliser une requête générique:

q={!boost b=recip(geodist(),1,1000,1000)}*&... 

... ou utiliser l'analyseur de requête de fonction:

q={!func}recip(geodist(),1,1000,1000)&... 

Vous devez également spécifier t il LAT/valeurs longues et champ spatial pour exécuter cette interrogation comme arguments de la fonction geodist:

q={!boost b=recip(geodist(50.1, -0.86, myGeoField),1,1000,1000)}foo:bar&... 

... ou factoriser en tant que paramètres de chaîne de requête:

q={!boost b=recip(geodist(),1,1000,1000)}foo:bar&sfield=myGeoField&pt=50.1,-0.86 
+0

Merci! Oui, la partie de la requête sur laquelle je me trompais spécifiait le champ lat/long et le domaine spatial! Merci encore! –

+1

Juste pour info, dans solr 3.x, vous devrez supprimer les espaces entre les virgules pour les paramètres – jjxtra

+0

@PsychoDad Holy moly, c'est un méchant gotcha. Résolu un problème pour moi, merci tas! – markdsievers

0

juste ajouter que je reçois de meilleurs résultats avec ...

{!boost b=recip(geodist(),1,100,10)} 

je ne sais pas ce qui cause cela, mais je souhaite Solr a donné un peu plus d'informations sur les paramètres du recip et boost. Current Documentation manque.

+0

recip() est une fonction '' recip (x, m, a, b) '' de la forme '' a/(m * x + b) ''. Lorsque a, b ont la même valeur, elle renvoie une valeur comprise entre 0 et 1. Lorsque a, b devient plus grand, il y a moins de variance dans la valeur renvoyée. –

0

En note, voici un boost de distance utilisé sur mon lieu de travail. C'est différent de celui sur le site de documentation de Solr. Cette fonction d'accélération traitera la distance de manière égale pour un certain nombre de kilomètres avant le début du renforcement. Ceci est utile dans certaines situations, où vous ne voulez pas de changements de pertinence pour de petites différences de distances.

Vous pouvez modifier la constante 25 pour obtenir le nombre de kilomètres que vous souhaitez augmenter.

Vous pouvez définir le coup de pouce à distance en tant que tel:

div(1.0, min(1000, max(25, geodist()))) 

distance boost plot

Questions connexes