2015-08-25 35 views
1

我有一個elasticsearch文檔,它有一個geo_points數組。我已經創建的映射:Elasticsearch - MissingMethodException在geo_point陣列上運行distanceInKm

{ 
    "test": { 
     "properties": { 
      "locations": { 
       "type": "geo_point" 
      } 
     } 
    } 
} 

現在,我想創造一個我想要做geo_points的陣列上的一些處理的查詢。我創建了我這樣的查詢:

{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "script": { 
        "script": "sDistance = doc['locations'].values[0].distanceInKm(28.51818,77.096080);" 
       } 
      } 
     } 
    } 
} 

我想計算從位置數組中的第一個元素的點(28.51818,77.096080)的距離。

這是給我這個錯誤:

GroovyScriptExecutionException [MissingMethodException [法無簽名:org.elasticsearch.common.geo.GeoPoint.distanceInKm()是適用於參數類型:(java.lang.Double中, java.lang.Double)values:[28.51818,77.09608]]

我試過使用sDistance = doc['locations'][0].distanceInKm(28.51818,77.096080);,但它也導致了相同的錯誤。

我在這裏做錯了什麼?

在此先感謝。

回答

2

您的腳本不應該由自己檢索第一個地理點,但只需調用distanceInKmlocations場直接,就像這樣:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "script": { 
      "script": "sDistance = doc['locations'].distanceInKm(28.51818,77.096080);" 
     } 
     } 
    } 
    } 
} 

引擎蓋下的first geo point will be retrieved和距離將是computed on it

+0

感謝您的回答! – R4chi7

+0

以及如何獲得從所有指標的距離我的意思不僅是從0,你可以請告訴我,這將是真正對我有幫助? –

+0

請您提出另一個問題,因爲您要求提供其他問題。 – Val