使用索引字段作为半径的 Solr 空间搜索?

Solr spatial search using an indexed field for radius?

所以我有一个城市索引,看起来像这样:

{
  "location": "41.388587, 2.175888",
  "name": "BARCELONA",
  "radius": 20
}

我们有几十个这样的。我需要能够使用单个 lat/lng 组合查询此索引,看看它是否属于我们的 "cities".

之一

location 属性 是城市的中心, radius 是城市的半径,单位为公里(假设所有城市都是圆形)。我们也可以假设没有城市重叠。

如何return判断一个lat/lng组合是否在一个城市内?

例如,给定点 40.419691, -3.701254,我如何确定它是否属于巴塞罗那?

您可以在 Lucene、Solr 或 ES 中轻松完成。

例如在 Solr 中:

  1. 声明一种 SpatialRecursivePrefixTreeFieldType。这允许您索引不同的形状,而不仅仅是点
  2. 通过使用 lat/long 和半径,您可以为每个城市创建一个特定的圆,并在名为 'shape' 的字段中为该形状建立索引,例如:

    {
      "location": "41.388587, 2.175888",
       "name": "BARCELONA",
       "shape": "CIRCLE (2.175888 41.388587, 20)"
    }
    
  3. 然后您只需查询与您的观点相交的任何文档(未经测试):

    fq=shape:"Intersects(40.419691 -3.701254)"
    

请务必查看您正在使用的 Lucene/Solr/ES 特定版本的文档和 javadoc,因为此 space

中的 API 一直在变化