簡體   English   中英

在ONGR ElasticsearchDSL中按距離對結果進行排序

[英]Sorting results by distance in ONGR ElasticsearchDSL

我將ONGR ElasticsearchDSL Bundle和Symfony 3一起使用,通過緯度/經度坐標搜索城市列表,如下所示:

$repository = $this->elasticsearchManager->getRepository(CityDocument::class);
$search = $repository->createSearch();

$boolQuery = new BoolQuery();
$boolQuery->add(new MatchAllQuery());
$geoQuery = new GeoDistanceQuery('geo', '50km', $theSearch['location']);
$boolQuery->add($geoQuery, BoolQuery::FILTER);
$search->addQuery($boolQuery);
$documents = $repository->findDocuments($search);

雖然這樣可以使我在匹配的城市中獲得不錯的結果,但是我不清楚如何按照距源點的距離(在$ theSearch ['location']中找到)進行排序,以便使它們從最接近的位置到最遠的位置排序!

這是使用ElasticsearchDSL(包括所需排序)的正確方法。

$repository = $this->elasticsearchManager->getRepository(CityDocument::class);
$search = $repository->createSearch();

$geoQuery = new GeoDistanceQuery('geo', '50km', $theSearch['location']);
$search->addQuery($geoQuery, BoolQuery::FILTER);

$sort = new FieldSort('_geo_distance', null, [
    'geo' => $geoLocation,
    'order' => 'asc',
    'unit' => 'km',
    'mode' => 'min',
    'distance_type' => 'arc'
]);
$search->addSort($sort);

$documents = $repository->findDocuments($search);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM