Database design 数据距离受限的空间查询

Database design 数据距离受限的空间查询,database-design,solr,geolocation,geospatial,spatial,Database Design,Solr,Geolocation,Geospatial,Spatial,我正在构建一个具有地理定位功能的应用程序。我目前正在研究存储和查询数据的最佳方法。 这是我常用的用例 人物A添加带有地理位置的图像。除了地理位置数据外,他/她还添加了一个标志,表明他/她的图像仅对1英里内的用户可见 现在,我的问题是,存储此信息的最佳方式是什么,以便另一个人可以看到他当前位置附近的所有图像,同时遵守存储图像的限制,例如,仅在1英里内可见,仅在2英里内可见,等等。Solr具有地理空间搜索功能(最近通过Java Topology Suite库对其进行了极大的增强)有一个使用距离过滤器

我正在构建一个具有地理定位功能的应用程序。我目前正在研究存储和查询数据的最佳方法。 这是我常用的用例

人物A添加带有地理位置的图像。除了地理位置数据外,他/她还添加了一个标志,表明他/她的图像仅对1英里内的用户可见


现在,我的问题是,存储此信息的最佳方式是什么,以便另一个人可以看到他当前位置附近的所有图像,同时遵守存储图像的限制,例如,仅在1英里内可见,仅在2英里内可见,等等。

Solr具有地理空间搜索功能(最近通过Java Topology Suite库对其进行了极大的增强)有一个使用距离过滤器的示例,该过滤器允许您查找距离d为某个点的任何内容,例如

&q=*:*&fq={!geofilt sfield=location}&pt=41.38,2.18&d=5
其中,q是搜索的非地理空间部分,sfield是您的位置字段,pt是点(必须为lat/lon,在上例中为巴塞罗那),d是距离字段。您可以用d参数替换您的属性以显示图像的距离

注意,还有一个geodist函数,它允许您按距离排序,如果您想突出显示更近的东西

您可以使用的另一种方法是使用空间数据库并将位置数据存储为点域。例如,Postgres/Postgis可以使用该功能,它允许您搜索某个点距离内的所有内容。Postgres/GIS使用R树索引,它允许非常快速和高效地搜索它还具有很好的属性部分全文搜索功能

select * from images where ST_DWithin( point, st_setsrid(st_makepoint(2.1, 41.38), 4326), 5);

您可以使用Oracle和SQL Server(在较小程度上使用MySQL)实现类似的功能这个方法可能比SoR方法更复杂,如果你坚持在LAT/Lon中的搜索,让我在这个点的距离D中匹配这个属性的所有图像,那么SoR当然会做你想做的,但是如果你想在未来考虑更高级的空间功能,并利用其他DATabasPrimes,你可能想考虑空间数据库方法。

你是否被限制为SOLR,或者会有另一个解决方案吗?我尝试打开一个不同的数据存储层来回答约翰。我很熟悉使用SoRR,我只是在想,如果这是最好的方式,我的搜索将是空间搜索+ Traci。但是搜索。我也研究过postgres/postgis,但我没有做过任何更快的基准测试,solr或postgresql/postgis,因为我没有太多的数据来做基准测试。为solr的假设道歉。根据我的经验,通过tsearch和各种contrib包在postgres中进行文本搜索是非常强大的,但需要相当数量的数据t表示微调,而Solr(Lucene)或多或少都是开箱即用的。当然,从数据存储的角度来看,Postgres和Solr是非常不同的野兽,Postgis的空间能力要大得多,即使在Solr中包含了JTS。最终,您只能通过预期的用例测试来决定,正如您所说,这在您的cas中是有问题的E