正确索引Lucene中的纬度和经度值

use*_*042 5 lucene lucene.net

我正在使用Lucene API处理"在给定半径内基于​​美国的最近城市搜索"功能.我在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));
Run Code Online (Sandbox Code Playgroud)

由于Lucene只理解字符串而不是数字,因此填充lat和long值.

例如,如果原始lat和long分别为41.811846和-87.820628,则在填充后,值看起来像:

paddedLatitude - >"0041.811846"和paddedLongitude - >" - 087.820628"

在构建最近的城市查询时使用相同的填充(使用Lucene的ConstantScoreRangeQuery类).

鉴于lat和long值可能是十进制/负数,这是正确的索引方法,以便当lucene对这些值执行数字范围/比较操作时,我会在搜索结果中得到正确的最近城市吗?

谢谢.

Yuv*_*l F 6

这是关于该主题的专家Uwe Schindler 在Lucene中搜索数字字段的最前沿.您可能需要使用较旧(且较慢)的ConstantScoreRangeQuery,因为Lucene.net稍微落后于Lucene,并且链接中描述的NumericRangeQuery类尚未在Java Lucene中发布.