2009-06-28 5 views
5

Je travaille sur une fonctionnalité de "recherche basée sur la ville la plus proche des Etats-Unis dans un rayon donné" à l'aide de Lucene API. Am indexation des valeurs de la ville lat et long dans Lucene comme suit:Indexation correcte des valeurs de latitude et de longitude dans Lucene

doc.Add(new Field("latitude", paddedLatitude, Field.Store.YES, Field.Index.UN_TOKENIZED)); 

doc.Add(new Field("longitude", paddedLongitude, Field.Store.YES, Field.Index.UN_TOKENIZED)); 

Depuis Lucene ne comprend que des cordes et non des chiffres, des valeurs Rembourrage suis lat et long.

Par exemple, si lat et long sont respectivement d'origine et 41,811846 -87,820628, après remplissage, les valeurs ressemblent:

paddedLatitude -> "0041,811846" et paddedLongitude -> "- 087,820628"

Je fais le même remplissage en construisant la requête de ville la plus proche (en utilisant la classe ConstantScoreRangeQuery de Lucene). Etant donné que les valeurs lat et long peuvent être des nombres décimaux/négatifs, est-ce la bonne approche pour les indexer afin que j'obtienne les villes les plus proches dans les résultats de la recherche quand Lucene effectuerait une opération de plage/comparaison sur ces valeurs?

Merci.

Répondre

6

Voici le point culminant à propos de Searching Numerical Fields in Lucene par Uwe Schindler, l'expert sur le sujet. Vous devrez peut-être utiliser l'ancienne (et plus lente) ConstantScoreRangeQuery car Lucene.net est un peu en retard sur Lucene, et la classe NumericRangeQuery décrite dans le lien n'a pas encore été publiée dans Java Lucene.

1

L'article lié dans la réponse de Yuval F m'a fait réaliser que j'avais tort dans un earlier answer, sur lequel vous semblez compter.

Vous ne devriez pas indexer les nombres négatifs tels quels, en particulier dans ce cas, où certaines valeurs sont négatives et d'autres positives.

This article semble avoir une assez bonne discussion sur la recherche spatiale. Il utilise certaines transformations pour rendre toutes les valeurs positives, et il aborde également d'autres sujets dont vous devriez probablement être au courant, comme les calculs de distance. Une chose à retenir si vous codez les valeurs est de les coder à la fois pour l'indexation et lors de la construction de la requête.

+0

merci ... et qu'en est-il des nombres décimaux ?? – user74042

+0

Merci encore .... J'ai essayé la solution mentionnée dans le lien de l'article ci-dessus (http://sujitpal.blogspot.com/2008/02/spatial-search-with-lucene.html), mais en exécutant la requête Lucene.net jette une exception: Nom du paramètre: latitude System.ArgumentException: La valeur fournie est hors limites. Nom du paramètre: latitude Voici ma requête: latitude: [131450428 TO 132173263] longitude: [091694457 TO 092664286] – user74042

Questions connexes