我已經實作了 Elastic Search - Java API 來根據距離搜索資料。
QueryBuilder geoQuery = QueryBuilders.geoDistanceQuery("article_location.location").point(lat , lon).distance(5 , DistanceUnit.KILOMETERS);
QueryBuilders.boolQuery().filter(geoQuery);
但是,我想從輸入緯度/經度獲得每個結果的距離。有什么辦法可以指定嗎?
我在彈性 DSL 中看到我們可以通過它來實作,script_fields但不知道如何通過 Java API 獲取它。
"script_fields": {
"distance": {
"script": "doc['latlong'].distanceInKm(lat, lon)"
}
我正在使用
elasticsearch-rest-high-level-client 7.9.2 版本。
uj5u.com熱心網友回復:
Java 客戶端還允許您向查詢添加腳本欄位,就像這樣:
sourceBuilder.query(...);
// add lat/lon as parameters
Map<String, Object> params = new HashMap<String, Object>();
params.put("lat", lat);
params.put("lon", lon);
// create the script
Script script = new Script(ScriptType.INLINE, "painless", "doc['latlong'].distanceInKm(params.lat, params.lon)", params);
// add the script field to the source query builder
sourceBuilder.scriptField("distance", script);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/393205.html
標籤:弹性搜索
