Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正确索引Lucene中的纬度和经度值_Lucene_Lucene.net - Fatal编程技术网

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

正确索引Lucene中的纬度和经度值,lucene,lucene.net,Lucene,Lucene.net,我正在使用Lucene API开发“给定半径内基于美国的最近城市搜索”功能。 Am在Lucene中索引城市的lat和long值,如下所示: 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_TOKENIZE

我正在使用Lucene API开发“给定半径内基于美国的最近城市搜索”功能。 Am在Lucene中索引城市的lat和long值,如下所示:

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));
因为Lucene只理解字符串而不理解数字,所以我会填充lat和long值

例如,如果原始lat和long分别为41.811846和-87.820628,则填充后的值如下所示:

填充纬度-->“0041.811846”和填充经度-->“-087.820628”

我在构建最近的城市查询(使用Lucene的ConstantScoreRangeQuery类)时也在做同样的填充

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


谢谢。

这是这方面的专家Uwe Schindler的最新研究成果。您可能需要使用较旧(速度较慢)的ConstantScoreRangeQuery,因为Lucene.net有点落后于Lucene,而且链接中描述的NumericRangeQuery类还没有在Java Lucene中发布。

Yuval F答案中的链接文章让我意识到我在一个您似乎依赖的领域是错误的

您不应该按原样索引负数,尤其是在这种情况下,其中一些值是负数,一些值是正数

似乎对空间搜索有很好的讨论。他使用一些转换使所有的值都为正,他还涉及到其他你可能应该注意的主题,比如距离计算


如果要对值进行编码,需要记住的一件事是在索引和构建查询时对它们进行编码。

再次感谢……我尝试了上述文章链接中提到的解决方案(执行查询时,Lucene.net抛出异常:参数名称:latitude System.ArgumentException:提供的值超出范围。参数名称:latitude这是我的查询:latitude:[131450428到132173263]经度:[091694457到092664286]