使用索引字段作为半径的 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 中:
- 声明一种 SpatialRecursivePrefixTreeFieldType。这允许您索引不同的形状,而不仅仅是点
通过使用 lat/long 和半径,您可以为每个城市创建一个特定的圆,并在名为 'shape' 的字段中为该形状建立索引,例如:
{
"location": "41.388587, 2.175888",
"name": "BARCELONA",
"shape": "CIRCLE (2.175888 41.388587, 20)"
}
然后您只需查询与您的观点相交的任何文档(未经测试):
fq=shape:"Intersects(40.419691 -3.701254)"
请务必查看您正在使用的 Lucene/Solr/ES 特定版本的文档和 javadoc,因为此 space
中的 API 一直在变化
所以我有一个城市索引,看起来像这样:
{
"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 中:
- 声明一种 SpatialRecursivePrefixTreeFieldType。这允许您索引不同的形状,而不仅仅是点
通过使用 lat/long 和半径,您可以为每个城市创建一个特定的圆,并在名为 'shape' 的字段中为该形状建立索引,例如:
{ "location": "41.388587, 2.175888", "name": "BARCELONA", "shape": "CIRCLE (2.175888 41.388587, 20)" }
然后您只需查询与您的观点相交的任何文档(未经测试):
fq=shape:"Intersects(40.419691 -3.701254)"
请务必查看您正在使用的 Lucene/Solr/ES 特定版本的文档和 javadoc,因为此 space
中的 API 一直在变化