2012-11-14 81 views
3

我正在嘗試排除Solr4及其空間功能的故障。 我有一個以字段「geo」索引的文檔。Solr4空間故障排除多邊形

在它我有以下

緯度-34.7413

經度149.7102

Stored as <geo>-34.741328,149.710238</> 

我還試圖索引同一文檔

<geo> 149.710238 -34.741328 

其建議如果你不是用逗號分開這些值(反轉經緯度和放值之間的空格)。

文檔索引就好了。

我正試圖發送一個多邊形搜索。多邊形是三角形,如果您可以想象三角形的下面3點順時針順序。這是一個非常大的三角形,目標座標位於某處。我選擇了一個簡單的調試的希望一個三角形,我打算繪製這些搜索

(-34.580136904223494, 149.6165823974609) 

(-34.84203933395146, 150.0175833740234) 

(-34.84654761634415, 149.4627738037109) 

我發出的Solr以下查詢,並得到錯誤更復雜的形狀。

fq=geo:"Intersects(POLYGON(-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627))" 

我在三角形的嘗試。

fq=geo:"Intersects(POLYGON(-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627, -34.5801 149.6165))" 

我嘗試添加最後一個座標以「關閉」多邊形。 上述2個查詢不返回任何結果,只有以下錯誤。

ERROR 500 無法讀取:POLYGON(-34.5801 149.6165,-34.8420 150.0175,-34.8465 149.4627,-34.5801 149.6165)

我的問題我想在這裏先看看嗎?我安裝了JTS庫。 Solr日誌記錄這一點。

19:11:50 

SEVERE 

SolrDispatchFilternull:com.spatial4j.core.exception.InvalidShapeException: Unable to read: POLYGON((-34.5801 149.6165, -34.8420 150.0175, -34.8465 149.4627)) 

感謝任何人都可以提供的指針。我認爲問題或者是solr配置問題,不知怎麼的東西沒有正確安裝,發送它的座標和形狀的方式,或其他我缺少的東西。

+0

我可以使用左下角,右上角座標法按照下面的方式執行矩形搜索 - fq = geo:[ - 34.8690,149.4023%20TO%20-34.6072,149.9022] –

+0

誰能告訴我如何實現這個在java中或使用spring-data-solr – Swaraj

回答

2

FQ =地理: 「相交(多邊形(-34.5801 149.6165,-34.8420 150.0175,-34.8465 149.4627,-34.5801 149.6165))」

你幾乎擁有它的權利。是的,你需要關閉多邊形,並且你在這裏做了。但是你錯過了一對額外的括號圍繞座標列表:

FQ =地理: 「相交(POLYGON(( - 34.5801 149.6165,-34.8420 150.0175,-34.8465 149.4627,-34.5801 149.6165)))」

額外的括號是因爲可能有多個座標列表。第一個列表是外環,後面的列表是內環,AKA孔。這是標準的WKT。

+0

嗨大衛, 再次感謝。我仍然得到這個錯誤,(錯誤500多邊形未找到)。我看到帖子有額外的括號,不明白爲什麼,並認爲它是我的錯誤的原始來源,所以刪除了它們。任何其他想法嘗試? –

+0

這些是日誌中的錯誤。 7點49分24秒 嚴重 SolrCore com.spatial4j.core.exception.InvalidShapeException:無法讀取:POLYGON(( - 34.5801 149.6165,-34.8420 150.0175,-34.8465 149.4627)) 7點49分24秒 重症 SolrDispatchFilter null:com.spatial4j.core.exception.InvalidShapeException:無法讀取:POLYGON(( - 34.5801 149.6165,-34.8420 150.0175,-34.8465 149.4627)) –

+0

最有可能的是您實際上並沒有真正擁有JTS在類路徑上。要絕對確定,把它放在Solr的WEB-INF/lib –

3

好吧,所以我認爲在這個日子之後,我在David Smiley的幫助下解決了這個問題,他在互聯網上彈出幫助自己和其他人解決他們的Solr空間問題 - 如果我們見面,我會倒入許多啤酒你 - 謝謝你的幫助。

你必須扭轉每一個co-ord(long/lat代替)的lat/long並且它的工作。馬上。很簡單。

fq=geo:"Intersects(POLYGON((149.4023 -34.6072, 149.4023 -34.8690, 149.9022 -34.8690, 149.9022 -34.6072, 149.4023 -34.6072)))" 

,而不是這個

fq=geo:"Intersects(POLYGON((-34.6072 149.4023, -34.8690 149.4023, -34.8690 149.9022, -34.6072 149.9022, -34.6072 149.4023)))" 

希望這個線程幫助別人。

如果有疑問,我試圖調試這個地方,如下所示。 1.解壓solr.war文件並將其保存爲文件夾而不是文件。有很多方法可以根據您的服務器來執行此操作。對於像我這樣的業餘愛好者,configserver explorer,一個whm插件,是你的朋友:)。 2.下載jts插件,解壓縮,在/ lib /文件夾內有一個文件jts-1.12.jar - 這是錢文件。 3.上傳到你的solrinstall/solr.war/WEB-INF/lib /位置 - 你知道你在正確的地方,當你看到很多其他的.jar文件時 4.如果你想要你可以重新包裝戰爭文件,或者它應該像這樣解壓縮。 5.確保您的架構完全正如它在solr wiki中所說的那樣。這在默認情況下不存在。再次檢查並檢查。加這個

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

並以下列方式添加您的字段「geo」。

<field name="geo" type="location_rpt" indexed="true" stored="true" multiValued="true" /> 

索引您的數據。我的數據是緯度/長度順序,看起來像這樣。 地理位置:-34.741328,149.710238 請記住Lat = horizo​​ntal,Long =豎線。 6.使用Lucene搜索方法測試您的搜索。你可以做一個非常簡單的矩形搜索。找到您的目標文件GEO點,然後找到左下角的座標和右上角的座標。所有你需要的矩形是2點,你只需做一個範圍搜索。對我來說,它看起來像這樣。

fq=geo:[-34.8690,149.4023 TO -34.6072,149.9022] 

如果這樣工作,你有基本的GEO搜索工作。

  1. 現在,讓我們做一個多邊形掉那些座標的。爲了製作一個多邊形(在這種情況下是矩形形狀),我們需要5個同心圓,開始的一個,矩形的其他三個點,然後再次開始同向,以關閉形狀(多邊形)。 無論出於何種原因,多邊形搜索都使用不同的緯度/長度佈局。你必須改變這一點。你把LONGITUDE FIRST。您還必須以COUNTER-CLOCKWISE格式構造此形狀。因此,使用由上述座標構成的點進行多邊形搜索如下所示。

    FQ =地理: 「相交(POLYGON((149.4023 -34.6072,-34.8690 149.4023,149.9022 -34.8690,-34.6072 149.9022,149.4023 -34.6072)))」

正如你所看到的, lat/long是long/lat,每個long/lat由一個空格分隔,並且每個co-ord對用逗號「,」分隔。

希望這個線程可以幫助別人。

+0

對於上面這個星球上最糟糕的格式的道歉。 –