【问题标题】:Searching in Solr for boundaries which overlap 50% of the area of the given boundary在 Solr 中搜索与给定边界面积的 50% 重叠的边界
【发布时间】:2016-03-08 08:01:31
【问题描述】:
我们获得了 Solr 中索引的所有文档的边界数据(多边形的纬度、经度点)。我正在接收其中一个边界作为输入,并且我想检索其边界完全在给定边界内或与给定边界内超过 50% 的区域重叠的所有文档。
换句话说,边界与给定边界的交叉面积大于 50%。 (100%表示完全在里面)
边界采用 WKT(知名文本)格式,例如 POLYGON (((40 40, 20 45, 45 30, 40 40)))
【问题讨论】:
标签:
solr
lucene
geospatial
solr4
【解决方案1】:
所以基本上你已经索引了多边形数据,并且你有一个查询多边形。并且您希望找到至少 50% 被查询多边形覆盖的所有索引多边形。有道理。
我将从使用典型的 intersects 过滤器开始(您可以在 Solr 参考指南中查看如何操作)并使用 RptWithGeometrySpatialField 作为字段类型。这将为您提供所有具有任何重叠的索引文档(多边形)。
但 50% 的重叠要求很棘手;这将非常缓慢。您可以编写一个 Solr PostFilter,从位于该空间字段下的同一个 Solr 缓存中检索索引形状,然后使用 JTS 操作来确定重叠。副手,我认为这是通过裁剪完成的,然后你可以计算面积。但是在每个搜索结果上这样做会非常昂贵(很抱歉把它打断给你)。不过,如果它不是典型的搜索应用程序,也许您的要求会允许它。
作为不需要自定义编码的糟糕替代品,请考虑 BBoxField 实际上已经这样做了,但对于矩形。它根据重叠率进行评分,您可以使用 Solr 的 {!frange} 过滤评分。