Solr 如何最好地进行服务器端地理群集?

Solr 如何最好地进行服务器端地理群集?,solr,cluster-analysis,server-side,geo,localsolr,Solr,Cluster Analysis,Server Side,Geo,Localsolr,我想对大约500000个点进行预聚类 我还没有开始,但我想我会这么做: 将所有点存储在localSOLR索引中 根据一些管理信息确定“自然集群位置”(例如大城市) 然后为每个城市计算一个簇: 每个城市 对于每个缩放级别 查询索引以获取城市周围半径中包含的点(半径的长度取决于缩放级别) 这应该是非常有效的,因为只有100个主要城市,SOLR查询速度非常快。但再多思考一下就发现这是错误的: 可能有一些点群彼此之间比城市附近更“接近”:它们应该有自己的点群 在某些缩放级别,某些点与任何

我想对大约500000个点进行预聚类

我还没有开始,但我想我会这么做:

  • 将所有点存储在localSOLR索引中
  • 根据一些管理信息确定“自然集群位置”(例如大城市)
  • 然后为每个城市计算一个簇:
    • 每个城市
      • 对于每个缩放级别
        • 查询索引以获取城市周围半径中包含的点(半径的长度取决于缩放级别)
这应该是非常有效的,因为只有100个主要城市,SOLR查询速度非常快。但再多思考一下就发现这是错误的:

  • 可能有一些点群彼此之间比城市附近更“接近”:它们应该有自己的点群
  • 在某些缩放级别,某些点与任何城市的距离都不在可接受范围内,因此它们不会被计算在内
  • 一些城市彼此相邻,因此,一些点将被计数两次(添加到两个集群)
  • 还有其他办法:

    • 检查每个点并确定其属于哪个簇;这消除了上述问题2和3,但不是1,而且效率极低
    • 制作(矩形)栅格(针对每个缩放级别);这是可行的,但会导致疯狂/任意的集群,而这些集群并不“意味着”任何东西
    我想我正在寻找一种通用的地理聚类算法(或想法),但似乎找不到


    编辑以回答Geert Jan的评论

    我想构建“自然”集群,是的,是的,我担心如果我使用任意网格,它将无法反映数据的真实性。例如,如果有许多事件发生在两个矩形相交处或附近的点周围,我应该只得到一个簇,但实际上会构建两个簇(每个矩形中一个)

    最初,出于性能原因,我想使用localSOLR(因为我了解它,并且在将大量数据索引到SOLR中比将其加载到传统数据库中有更好的经验);但是,由于我们讨论的是预聚类,性能可能并没有那么重要(尽管不应该花费几天的时间来可视化新的聚类实验的结果)。我的第一种根据一组预定义的“大点”查询大量点的方法显然是有缺陷的,我提到的第一个原因是最强的:集群应该反映数据的真实性,而不是其他一些官僚定义(当然,它们显然会重叠,但数据应该放在第一位)

    对于实时集群,有一个很棒的集群器,它已添加到核心的Google Maps API:。我想知道是否有人尝试过“离线”运行它:在它需要的任何时间运行它,然后存储结果


    或者是否有一个聚类器,可以检查每个点,逐点,并输出包含其坐标和点数的聚类,并在合理的时间内完成此操作?

    您可能需要研究先进的聚类算法,如光学


    有了一个好的数据库索引,它应该是相当快的。

    我是否正确地理解,所有的方法都可能导致误报和/或误报,因为您从搜索空间的某种非自然分区开始(可能是出于性能原因)。你能详细说明一下这些要点吗?你说:“为每个缩放级别制作一个(矩形)网格;这是可行的,但会导致疯狂/任意的集群,它们“毫无意义”。理想情况下,点群对您有什么意义?也许你不需要非自然分区,但是如果没有更多的细节,我真的不能说。很抱歉,我之前没有看到你的评论,我依赖于自动通知,显然这不包括评论。。。我正在更新我的问题以回答你的评论。现在没有太多时间:看一下算法类:基于分层的聚类(可以根据缩放级别将较小的聚类集总/拆分为较大的聚类。还可以看一下与“基于距离的聚类”相比的“基于密度的聚类”概念。我觉得“基于密度的聚类”可能会为您的目标提供更自然的聚类。这些算法并不特别与地理相关(但当然是空间的)。这可能不需要成为一个问题,在相对较小的区域(如城市)你可能会忘记地球是“圆的”…你在这里发现了什么吗?我们正在尝试做同样的事情…你能提供一个关于你最终做了什么的更新吗?