我正在使用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对这些值执行数字范围/比较操作时,我会在搜索结果中得到正确的最近城市吗?
谢谢.
这是关于该主题的专家Uwe Schindler 在Lucene中搜索数字字段的最前沿.您可能需要使用较旧(且较慢)的ConstantScoreRangeQuery,因为Lucene.net稍微落后于Lucene,并且链接中描述的NumericRangeQuery类尚未在Java Lucene中发布.
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |