Я пытаюсь реализовать геодезический поиск по электронной почте с помощью elasticsearch.
Как правило, это работает, но если я выполняю поиск почтового индекса, который имеет листинг, в некоторых случаях это листинг вообще не отображается. Но другие списки вне почтового индекса (в пределах диапазона) действительно появляются. Я ожидал, что листинг с тем же почтовым индексом появится в верхней части остальных, но он вообще не отображается.Запрос о elasticsearch geo distance postcode поиск
Это код PHP, который у меня есть.
Я полный новичок, когда дело доходит до elasticsearch, и я просто работаю с существующим кодом elasticsearch, который был настроен предыдущим разработчиком.
Благодаря
$es = new Elasticsearch\Client();
include('helpers/geoHelper.php');
$geo = new geoHelper();
$geoData = $geo->getLatLngFromAddress($postcode.',+AU');
$params['body']['sort']['_geo_distance']['location']['lat']= $geoData->lat;
$params['body']['sort']['_geo_distance']['location']['lon']= $geoData->lng;
$params['body']['sort']['_geo_distance']['order'] = 'asc';
$params['body']['sort']['_geo_distance']['unit'] = 'km';
$params['body']['sort']['_geo_distance']['distance_type'] = 'plane';
$params['body']['fields'] = '_source';
$params['body']['script_fields']['distance']['lang'] = 'groovy';
$params['body']['script_fields']['distance']['params'] = array(
'lat' => $geoData->lat,
'lon' => $geoData->lng
);
$params['body']['script_fields']['distance']['script'] = "doc['location'].distanceInKm(lat,lon)";
$filter_distance = array(
'distance' => '200km',
'location' => array(
'lat' => $geoData->lat,
'lon' => $geoData->lng,
)
);
$params['body']['query']['filtered']['filter']['geo_distance'] = $filter_distance;
$params['body']['size']=25
$params['body']['from']=1
$params['index'] = 'shops';
$params['type'] = 'shop';
$data = new stdClass();
$data->results = $es->search($params);