Сортировка результатов по расстоянию в ONGR ElasticsearchDSL - PullRequest
0 голосов
/ 30 августа 2018

Я использую 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']), чтобы я получал их от ближайшего к дальнему. ?! * * 1004

1 Ответ

0 голосов
/ 31 августа 2018

Это правильный способ использования 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);
...