sorting - 在 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);
推荐阅读
- reactjs - 根据某些条件使 TextField 显示动态值?
- python - 在烧瓶应用程序上运行 docker-compose 时,python 文件上的导入模块名称会给出 ModuleNotFound
- azure - GithubActions:使用 SPN 证书凭据登录 AKV 失败
- python - 获取 TypeError:replace() 缺少必需的参数 'dst' (pos 2) 错误。如何解决这个问题?
- amazon-s3 - 使用 AWS Transcoder 将视频转换为新的文件类型
- java - Spring with Jackson 在全球范围内设置 JsonAutoDetect
- javascript - React Native Windows - 原生 UI 组件不会显示
- simd - 如何使用 avx(但没有 avx-512)将 int 64 转换为 int 32
- automation - 未创建 Chromedriver 会话
- python - 与 Tensorflow 和 LSTM 不兼容的层