基于Lucene的位置搜索空间查询
我的lucene索引已将纬度和经度字段索引如下:基于Lucene的位置搜索空间查询,lucene,lucene.net,Lucene,Lucene.net,我的lucene索引已将纬度和经度字段索引如下: doc.Add(new Field("latitude", latitude.ToString() , Field.Store.YES, Field.Index.UN_TOKENIZED)); doc.Add(new Field("longitude", longitude.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED)); 我想从这个索引中检索一组文档,其lat和long值在给定
doc.Add(new Field("latitude", latitude.ToString() , Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.Add(new Field("longitude", longitude.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
我想从这个索引中检索一组文档,其lat和long值在给定范围内
正如您已经知道的,Lat和long可能是负值。如何在Lucene中正确存储带符号的十进制数?
下面提到的方法是否会给出正确的结果,或者是否有其他方法可以做到这一点
Term lowerLatitude = new Term("latitude", bounds.South.ToString() );
Term upperLatitude = new Term("latitude", bounds.North.ToString());
RangeQuery latitudeRangeQuery = new RangeQuery(lowerLatitude, upperLatitude, true);
findLocationQuery.Add(latitudeRangeQuery, BooleanClause.Occur.SHOULD);
Term lowerLongitude = new Term("longitude", bounds.West.ToString());
Term upperLongitude = new Term("longitude", bounds.East.ToString());
RangeQuery longitudeRangeQuery = new RangeQuery(lowerLongitude, upperLongitude, true);
findLocationQuery.Add(longitudeRangeQuery, BooleanClause.Occur.SHOULD);
另外,我想知道Lucene的ConstantScoreRangeQuery如何优于RangeQuery类
在这种情况下,我面临另一个问题:
我在索引中有一个文档,其中包含以下3个城市:
- 伊利诺伊州里昂 伊利诺伊州橡树溪 加利福尼亚州旧金山
doc.Add(new Field("latitude", latitude.ToString() , Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.Add(new Field("longitude", longitude.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
- 加利福尼亚州旧金山 伊利诺伊州里昂 伊利诺伊州橡树溪 当我把旧金山、CA作为输入,那么这个记录显示在搜索结果中。
谢谢。这里的一个选项是将坐标转换成一个没有负数的系统。例如,我在英国的谷歌地图网络应用程序中遇到了类似的问题,我在Lucene中将英国东距/北距(范围从0到7位)字段存储在lat/long值旁边。通过用左填充的零格式化这些东/北,我可以进行lucene范围查询
美国有类似的坐标系吗?根据斯卡夫曼的建议,你可以使用所有流行地图应用程序使用的相同坐标系。选择适合您需要的足够精细的缩放级别,别忘了用前导零填充 关于,它比ConstantCorerangeQuery慢,并且限制了值的范围
关于城邦问题,我们只能猜测。但是首先要检查的是,索引的术语和解析的查询是您所期望的。我认为最好的方法是按照前一篇文章中的建议转换/规范化坐标。就是这样。这实际上是非常好的面向对象的代码 关于你的第二个问题。我想你可能有什么分析仪问题。您是否使用相同的分析器进行索引和查询?您使用哪些标记器 我建议使用来检查生成的索引,以查看哪些令牌实际上是可搜索的
--哈代谢谢..我将探讨这个选项..你能回答我关于多个城市的问题的第二部分吗?这实际上是三个独立的问题。你为什么不把它分开呢?在这里。我为你迈出了第一步: