Comment stimuler score de pertinence Solr par inverse de geodist ()
-
11-10-2019 - |
Question
Je l'ai installé et utilisé avec succès Solr 4. Je dois dire que Solr 4 est génial! Quoi qu'il en soit, je triai avec succès par la distance et utilisé un geofilter pour limiter les résultats à une certaine zone. Ce que je voudrais faire est maintenant à stimuler le score de pertinence par l'inverse de la distance. Cette page parle à ce sujet, mais ne dit pas comment le faire (http://wiki.apache.org/solr/SpatialSearch)
Je l'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!
La solution
Vous devez spécifier toujours la partie principale de votre requête après la fonction boost:
q={!boost b=recip(geodist(),1,1000,1000)}foo:bar&...
Si vous ne souhaitez que 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 les valeurs lat / long et champ spatial à 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 refactorisée 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
Autres conseils
Il suffit d'ajouter que pour obtenir 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. Documentation actuelle manque.
Comme une note de côté, voici un coup de pouce à distance utilisée à mon lieu de travail. Il est différent de celui sur le site de documentation Solr. Cette fonction boost traitera également la distance pour un certain nombre de kilomteres avant la relance commence. Ceci est utile dans certaines situations, où vous ne voulez pas les changements de pertinence pour les petites différences dans les distances.
Vous pouvez changer la 25
constante d'être un certain nombre de kilomètres que vous voulez que le coup de pouce à être le même.
Vous pouvez définir le coup de pouce à distance en tant que tel:
div(1.0, min(1000, max(25, geodist())))