2012-09-21 35 views
5

我付了第三方編碼器來開發Solr的模式,但現在我對自己有了更多的瞭解,我有一個問題。在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 但沒有被提交到經緯度

此外,我的schema.xml中沒有提及「latlng」,所以它並不像我看到的那樣有一個組合或連接函數。

所以,我的問題是,latlng有一個目的,或者有編碼器錯誤?

回答

5

latlng字段類型被定義爲位置。位置字段的定義如下。

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

它需要創建具有_coordinate後綴的動態字段。

在您的示例中,latlng_0_coordinate應該用於經度字段,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

+0

精湛,謝謝 –

+0

@帕爾文,其中提到它在d該參數值會在千米? 我在幾英里的地方看過它。 – NamingException