使用solr空间搜索查找最大和最小纬度和经度的有效方法

时间:2014-07-24 08:07:56

标签: solr spatial

场景: 我需要找到所有对象的边界坐标,这样它们就位于特定的地理坐标边界内。每个对象都有自己的位置。我正在使用带有solr的数据传输。

为了解决这个问题,我分别对纬度和经度列进行索引,并执行有序分页搜索,以获得具有最小和最大纬度值且经度相同的顶部和最后一个对象。现在使用(min_lon,min_lat)和(max_lon,max_lat)我得到边界框的左下角和右上角坐标。

还有其他方法可以执行此任务吗?我也在考虑大数据集的性能问题。

1 个答案:

答案 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": {}
    }
  }
}