使用elasticsearch进行地理距离排序时遇到问题,在尝试定义位置引脚时会返回错误。使用Elastica PHP客户端。
$base->addSort([
'_geo_distance' => [
'location' => $location,
'order' => 'asc',
'unit' => 'm'
]
]);
错误是;
[GeoDistanceSort]的非法纬度值[269.58378318697214] [原因:所有分片都失败]
这表明纬度的值> 180,但该值仅为51.561965753874624,经度为-0.38245278430174103(从谷歌地图中检索)。
在输入排序功能之前,我已经检查了值仍然如上所述。
答案 0 :(得分:1)
我发现问题是弹性搜索不喜欢地图位置的精确程度!
我实现了以下操作来将值四舍五入到小数点后6位,并且它有效。
foreach ($mapcentre as $deg) {
$location[] = round($deg, 6);
}