2010-05-07 12 views
5

Je cours Solr sur ma machine Windows en utilisant jetée. J'ai téléchargé le Spatial Solr Plugin que j'ai finalement réussi à mettre en place. J'utilise aussi Solrnet pour interroger Solr à partir de mon projet asp.net mvc.Comment ajouter Solr Spatial à une requête Solrnet

Maintenant, l'ajout de données dans mon index semble fonctionner correctement et la SpatialTierUpdateProcessorFactory fonctionne également.

Le problème est:

Comment puis-je ajouter la requête spatiale à ma requête normale en utilisant la bibliothèque Solrnet. J'ai essayé de l'ajouter en utilisant le paramètre "ExtraParams" mais cela n'a pas très bien fonctionné.

Voici un exemple de tentative de combinaison de la requête spatiale avec une requête de plage de données. La requête de plage de dates fonctionne très bien sans la requête spatiale attachée à elle:

new SolrQuery("{!spatial lat=51.5224 long=-2.6257 radius=10000 unit=km calc=arc threadCount=2}") && new SolrQuery(MyCustomQuery.Query) && new SolrQuery(DateRangeQuery); 

qui se traduit par la requête suivante sur Solr:

(({!spatial lat=51.5224 long=-2.6257 radius=100 unit=km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:13:37Z TO 2011-05-07T13:13:37Z]) 

Et le message d'erreur que je reçois retour est:

Le serveur distant a renvoyé une erreur: (400) Mauvaise demande.

SEVERE: org.apache.solr.common.SolrException: org.apache.lucene.queryParser.Pars 
eException: Cannot parse '(({!spatial lat=51.5224 lng=-2.6257 radius=10000 unit= 
km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:09:49Z TO 2011-05-0 
7T13:09:49Z])': Encountered " <RANGEEX_GOOP> "lng=-2.6257 "" at line 1, column 2 
4. 
Was expecting: 
    "}" ... 

Maintenant, la chose est si j'utilise la page Web Admin Solr et exécutez la requête suivante contre elle, tout fonctionne bien.

{!spatial lat=50.8371 long=4.35536 radius=100 calc=arc unit=km threadcount=2}text:London 

Quelle est la meilleure façon d'appeler la fonction spatiale à l'aide de SolrNet? Est-ce le meilleur moyen d'ajouter en quelque sorte ce bit de la requête à la chaîne de requête et comment?

Répondre

5

Utilisez la classe pour représenter LocalParamsLocalParams in Solr:

solr.Query(new LocalParams { 
    {"type", "spatial"}, 
    {"lat", "-51.5224"}, 
    {"long", "-2.6257"}, 
    {"radius", "10000"}, 
    {"unit", "km"}, 
    {"calc", "arc"}, 
    {"threadCount", "2"}, 
} + Query.Field("text").Is("London")); 

Il est disponible à partir de SolrNet 0.3.0b1.

+0

À la votre! Exactement ce dont j'avais besoin. Je l'ai fait travailler en déconnant manuellement la chaîne de requête mais votre solution est la meilleure/la plus propre. Merci beaucoup! – Flo

Questions connexes