在Solr中存储坐标的正确方法

时间:2012-09-21 11:55:41

标签: solr lucene

我付了第三方编码器为Solr开发了一个模式,但现在我对自己有了更多的了解,我有一个问题。

目的是进行空间搜索,所以在我的模式中我有这个:

<field name="latlng" type="location" indexed="true" stored="false" />
<field name="latlng_0_coordinate" type="double" indexed="true" stored="false" />
<field name="latlng_1_coordinate" type="double" indexed="true" stored="false" />

我的网站通过JSON提交给lat_lng_0_coordinate和latlng_1_coordinate ,但没有任何内容提交给latlng

此外,我的schema.xml中没有提及“latlng”,所以就像我看到的那样,它并不像在那里有一个组合或连接函数。

所以,我的问题是,latlng是否有目的或编码器错误地将其置入?

1 个答案:

答案 0 :(得分:5)

latlng字段类型定义为位置。位置字段的定义如下。

<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>

需要使用_coordinate后缀创建动态字段。

在您的示例中,latlng_0_coordinate应用于lattitude字段,latlng_1_coordinate用于经度字段。

然后,通过使用空间查询,您可以使用latlng字段。

例如,为了在给定点的5km内找到最近的位置,您可以使用以下查询。 41.431,28.431只是我写的随机位置。

{!geofilt sfield=latlng}&pt=41.431,28.431&d=5

因此,这不是一个错误,它是有目的的。

另请参阅Solr文档:https://wiki.apache.org/solr/SpatialSearch#QuickStart