2013-05-13 117 views
1

有没有办法搜索与索引多边形X距离的多边形?Solr 4空间搜索多边形vs多边形与距离参数搜索

我已经收录多边形和multipolygons在SOLR 4.2.1指数与字段类型

<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType" 
      spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory" 
      distErrPct="0.001" 
      maxDistErr="0.000009" 
      units="degrees" 
     /> 

,我已经可以做一些简单的交叉查询,如

fq=geo_location:"Intersects(POLYGON((-0.141964 51.515580, -0.130119 51.516648, -0.129261 51.515900)))" 

所以我需要:
在多边形索引中搜索POLYGON +距离
和 在多边形索引中搜索POINT +距离(圆圈)

+0

嗨,所以有一个问题:solr的响应时间如何?我正在考虑使用solr + spark进行批量逆向地理编码。我不想知道Solr搜索是否支持它。 – 2016-04-07 09:08:58

回答

3

+距离(圆)被支持: http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
例如:geo_location: “相交(圆(4.56,1.23 d = 0.0710))”,由所述

多边形+距离被缓冲的多边形距离,然后做标准相交。 JTS有一个很容易使用的Geometry.buffer()操作 - 它只是一个方法调用。我希望有一天在Spatial4j(今年很有可能)中以某种方式公开这些内容,然后可以通过更高级别访问--Solr。同时,您可以在客户端代码中使用JTS来缓存多边形,然后将该多边形提交给Solr进行搜索。

请记住,所有这一切,JTS在二维空间中工作;它不知道关于测地线的任何信息(即它没有说明世界是一个球体的事实)。 Spatial4j包装JTS几何图形以添加日期线包装支持,但就是这样。 可能想要做的是考虑使用地图投影,如果所有的数据都在世界的某个地方方便。这可以大大减少一些歪斜效应。如果不这样做,将会出现扭曲效应的一个例子,那就是从赤道到极点的一半的缓冲多边形实际上将缓冲东西一半,就像缓冲南北。即使您没有在某些投影中将点存储在Solr中,您的客户端也可以在本地(在多边形的中心)投影您的查询​​多边形,然后将其缓存,然后将其重新投影到经纬度空间。如果您的多边形上有很多点,这将显着减少倾斜。如果查询多边形没有多个顶点,则可以人为添加它们。我在本段中讨论的所有内容都是我希望增加一天的内容,以便它是自动的。

+0

我原始数据中多边形的分辨率很荒谬。我必须通过将点数限制为285并将点的精度限制为4位十进制数字来“简化”多边形。在WKT格式,这给我一个少于4000个字符的形状。 所以我确实有很多要点,我的数据在世界某些地方很方便。英国,德国,荷兰和比利时。我对“地图投影”不是很熟悉,你能否指点我一些阅读材料? – kali 2013-05-14 15:57:21

+0

顺便说一句我跑的查询 geo_location:“Intersects(Circle(-0.141964,51.515580 d = 0.0590))” 只有一百万次没有结果,然后我意识到Circle期望(纬度,经度半径)格式运行 geo_location:“Intersects(Circle(51.515580,-0.041964 d = 0.010))” 成功让我回到SOHO并让我开心 – kali 2013-05-14 16:05:23

+0

对于非WKT(Circle语法有点破解),您可以执行“xy “或”y,x“。 RE预测,您可以使用Proj4j来帮助您项目数据。维基百科(和谷歌搜索),你会发现有关预测迷人的信息负载。我并不声称自己是这个问题的专家;我还没有使用这种技术。 – 2013-05-15 15:13:03