如何在弹性搜索中使用纬度经度搜索位置附近的区域
Posted
技术标签:
【中文标题】如何在弹性搜索中使用纬度经度搜索位置附近的区域【英文标题】:How to search area nearby a location using latitude longitude in elastic search 【发布时间】:2019-10-24 06:06:12 【问题描述】:我想通过我的弹性搜索搜索所有附近的位置,给定一对纬度和经度,它有两个单独的纬度和经度列。 如何做到这一点
【问题讨论】:
【参考方案1】:您必须使用 geoDistanceQuery。请在下面找到代码的 sn-p(用 Java 编写,使用 Elasticsearch REST 高级客户端。
仅供参考:我的网站上有完整的教程:www.ictdynamic.be -> ElasticSearch 6 – 使用 RestHighLevelClient 和 Java 进行空间查询 – 第 1 部分:geoDistanceQuery
public Set<?> geoDistanceQuery(String index, String nameGeoPointField, double lat, double lon, double distance, EsQuery esQuery) throws IOException
Date startDate = new Date();
Set<Object> objectsWithinDistance = new LinkedHashSet<>();
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
QueryBuilder geoDistanceQueryBuilder = QueryBuilders
.geoDistanceQuery(nameGeoPointField)
.point(lat, lon)
.distance(distance, DistanceUnit.KILOMETERS);
BoolQueryBuilder boolQuery = getBooleanQueryWithConditions(esQuery);
QueryBuilder completeQuery = QueryBuilders
.boolQuery()
.must(boolQuery)
.filter(geoDistanceQueryBuilder);
sourceBuilder.query(completeQuery).size(SIZE_ES_QUERY);
SearchRequest searchRequest = new SearchRequest(index)
.source(sourceBuilder.sort(SortBuilders.geoDistanceSort(nameGeoPointField, lat, lon)
.order(SortOrder.ASC)
.unit(DistanceUnit.KILOMETERS)));
SearchResponse searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
for (SearchHit hit : hits.getHits())
objectsWithinDistance.add(GeoService.getObjectFrom_ES_Hit(hit, nameGeoPointField));
return timedReturn(LOGGER, new Object() .getClass().getEnclosingMethod().getName(), startDate.getTime(), objectsWithinDistance);
【讨论】:
链接死了。 ictcalimero.wordpress.com/2018/04/06/…ictcalimero.wordpress.com/2018/04/22/…以上是关于如何在弹性搜索中使用纬度经度搜索位置附近的区域的主要内容,如果未能解决你的问题,请参考以下文章