【发布时间】:2015-02-19 02:48:26
【问题描述】:
我正在尝试使用 elasticsearch 实现邮政编码地理搜索。
通常它是一种工作,但如果我搜索一个确实有列表的邮政编码,在某些情况下,列表根本不会显示。但是邮政编码之外(范围内)的其他列表确实出现了。我希望具有相同邮政编码的列表出现在其他列表的顶部 - 但它根本没有显示。
这是我拥有的 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);
【问题讨论】:
标签: php elasticsearch