2013-05-13 120 views
1

有沒有辦法搜索與索引多邊形X距離的多邊形?Solr 4空間搜索多邊形vs多邊形與距離參數搜索

我已經收錄多邊形和multipolygons在SOLR 4.2.1指數與字段類型

<fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType" 
      spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory" 
      distErrPct="0.001" 
      maxDistErr="0.000009" 
      units="degrees" 
     /> 

,我已經可以做一些簡單的交叉查詢,如

fq=geo_location:"Intersects(POLYGON((-0.141964 51.515580, -0.130119 51.516648, -0.129261 51.515900)))" 

所以我需要:
在多邊形索引中搜索POLYGON +距離
和 在多邊形索引中搜索POINT +距離(圓圈)

+0

嗨,所以有一個問題:solr的響應時間如何?我正在考慮使用solr + spark進行批量逆向地理編碼。我不想知道Solr搜索是否支持它。 – 2016-04-07 09:08:58

回答

3

+距離(圓)被支持: http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
例如:geo_location: 「相交(圓(4.56,1.23 d = 0.0710))」,由所述

多邊形+距離被緩衝的多邊形距離,然後做標準相交。 JTS有一個很容易使用的Geometry.buffer()操作 - 它只是一個方法調用。我希望有一天在Spatial4j(今年很有可能)中以某種方式公開這些內容,然後可以通過更高級別訪問--Solr。同時,您可以在客戶端代碼中使用JTS來緩存多邊形,然後將該多邊形提交給Solr進行搜索。

請記住,所有這一切,JTS在二維空間中工作;它不知道關於測地線的任何信息(即它沒有說明世界是一個球體的事實)。 Spatial4j包裝JTS幾何圖形以添加日期線包裝支持,但就是這樣。 可能想要做的是考慮使用地圖投影,如果所有的數據都在世界的某個地方方便。這可以大大減少一些歪斜效應。如果不這樣做,將會出現扭曲效應的一個例子,那就是從赤道到極點的一半的緩衝多邊形實際上將緩衝東西一半,就像緩衝南北。即使您沒有在某些投影中將點存儲在Solr中,您的客戶端也可以在本地(在多邊形的中心)投影您的查詢​​多邊形,然後將其緩存,然後將其重新投影到經緯度空間。如果您的多邊形上有很多點,這將顯着減少傾斜。如果查詢多邊形沒有多個頂點,則可以人爲添加它們。我在本段中討論的所有內容都是我希望增加一天的內容,以便它是自動的。

+0

我原始數據中多邊形的分辨率很荒謬。我必須通過將點數限制爲285並將點的精度限制爲4位十進制數字來「簡化」多邊形。在WKT格式,這給我一個少於4000個字符的形狀。 所以我確實有很多要點,我的數據在世界某些地方很方便。英國,德國,荷蘭和比利時。我對「地圖投影」不是很熟悉,你能否指點我一些閱讀材料? – kali 2013-05-14 15:57:21

+0

順便說一句我跑的查詢 geo_location:「Intersects(Circle(-0.141964,51.515580 d = 0.0590))」 只有一百萬次沒有結果,然後我意識到Circle期望(緯度,經度半徑)格式運行 geo_location:「Intersects(Circle(51.515580,-0.041964 d = 0.010))」 成功讓我回到SOHO並讓我開心 – kali 2013-05-14 16:05:23

+0

對於非WKT(Circle語法有點破解),您可以執行「xy 「或」y,x「。 RE預測,您可以使用Proj4j來幫助您項目數據。維基百科(和谷歌搜索),你會發現有關預測迷人的信息負載。我並不聲稱自己是這個問題的專家;我還沒有使用這種技術。 – 2013-05-15 15:13:03