Question

Je suis en cours d'exécution Solr sur ma machine Windows en utilisant la jetée. J'ai téléchargé le Spatial Solr Plugin que je finalement réussi à se lever et courir. J'utilise également Solrnet requêter Solr de mon projet asp.net de mvc.

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

Le problème est:

Comment puis-je ajouter la requête spatiale à ma requête normale en utilisant la bibliothèque Solrnet. Je l'ai essayé d'ajouter à l'aide du paramètre « ExtraParams » mais cela ne fonctionne pas très bien.

Voici un exemple de moi en essayant de combiner 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 reviens est:

Le serveur distant a renvoyé une erreur:. (400) Bad Request

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 / bonne façon d'appeler la fonction spatiale en utilisant SolrNet. La meilleure façon d'ajouter une certaine façon que peu de la requête manuellement à la chaîne de requête et est alors comment?

Était-ce utile?

La solution

Utilisez la classe LocalParams pour représenter LocalParams dans 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.

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