2016-03-30 5 views
0

Я хотел бы использовать API-интерфейс java для возврата вычисленного поля в ответ на документы.Использование API elasticsearch java для вычисления расстояния с использованием геолокации пользователя

В частности, я хочу, чтобы пользователь проходил геосоединение и использовал это геоинформацию, чтобы вычислить расстояние между этим геоданным (переданным в запросе) и геоданными документов (хранимыми в индексе ES).

Я понимаю, что это легко осуществимо с помощью поля сценария следующим образом:

curl -XGET 'http://127.0.0.1:9200/geonames/_search?pretty=1' -d ' 
{ 
    "script_fields" : { 
     "distance" : { 
     "params" : { 
      "lat" : 2.27, 
      "lon" : 50.3 
     }, 
     "script" : "doc[\u0027location\u0027].distanceInKm(lat,lon)" 
     } 
    } 
} 

выше цитируемого из следующего SO сообщения: https://stackoverflow.com/a/9309674/536299

Теперь, как вы идете по поводу делать это с Java API или Spring Data ES?

ответ

1

Вы можете использовать ниже, чтобы преобразовать его в Java API

import org.elasticsearch.action.search.SearchRequestBuilder; 

    String script = "doc[\u0027location\u0027].distanceInKm(lat,lon)"; 
    Map<String, Object> params = ... 

    SearchRequestBuilder esRequestBuilder = new SearchRequestBuilder(<ES_CLIENT>); 
    esRequestBuilder.addScriptField("distance", script, params); 
+0

Спасибо большое @rahulroc, Hummm. Но тогда, поле сценария используется для всех типов документов? Как связать тип с указанным выше полем сценария? – balteo

+0

По типу .. вы имеете в виду тип elasticsearch в индексе? https://www.elastic.co/blog/index-vs-type – Rahul

+1

Да и я также подразумеваю класс java, аннотированный с данными весны es's @ org.springframework.data.elasticsearch.annotations.Document аннотации. – balteo