场景: 我需要找到所有对象的边界坐标,这样它们就位于特定的地理坐标边界内。每个对象都有自己的位置。我正在使用带有solr的数据传输。
为了解决这个问题,我分别对纬度和经度列进行索引,并执行有序分页搜索,以获得具有最小和最大纬度值且经度相同的顶部和最后一个对象。现在使用(min_lon,min_lat)和(max_lon,max_lat)我得到边界框的左下角和右上角坐标。
还有其他方法可以执行此任务吗?我也在考虑大数据集的性能问题。
答案 0 :(得分:0)
您可以使用Solr的Stats component来实现此目的。据推测,这应该像Solr 1.4一样工作,尽管我只在Solr 4.6上测试过它。
鉴于纬度和经度字段(您不需要存储值,只需要索引字段),您可以将以下内容添加到查询中:
stats=true&stats.field=latitude&stats.field=longitude
这将在结果中返回一个额外的 stats 组件,其中包括您刚刚运行的查询中这些字段的最小值和最大值。例如,使用json输出格式,您将得到类似这样的结果:
"stats": {
"stats_fields": {
"latitude": {
"min": -77.0833,
"max": 80.02,
"count": 946,
"missing": 9054,
"sum": 7071.808743139995,
"sumOfSquares": 826744.9247004522,
"mean": 7.475484929323462,
"stddev": 28.61678430457283,
"facets": {}
},
"longitude": {
"min": -170.0172222,
"max": 179.3667,
"count": 946,
"missing": 9054,
"sum": 19608.08470332999,
"sumOfSquares": 4377841.608102106,
"mean": 20.727362265676522,
"stddev": 64.82714283188912,
"facets": {}
}
}
}