【问题标题】:Query about elasticsearch geo distance postcode searchelasticsearch地理距离邮编搜索查询
【发布时间】: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


    【解决方案1】:

    这个库我也遇到了同样的问题,并尝试在互联网上寻求帮助。 但现在我已经使用 Query DSL 而不是使用数组格式解决了这个问题,我只是创建了有效的 JSON 查询并传递给你的 body 参数。例如

    Array
    (
    [index] => spnew
    [type] => sprovider_new
    [body] => {"from":0,"size":15,"sort":[{"_geo_distance":{"geo_location":{"lat":18.9295932,"lon":72.8327296},"order":"asc","unit":"km"}},{"likes_count":{"order":"desc"}},{"reviews.created_time":{"order":"desc"}}],"query":{"bool":{"must":[{"term":{"status":"1"}},{"term":{"category.category_id":"103"}},{"term":{"parent_service_id":"0"}},{"term":{"city_id":"1"}}]}}}
    )
    

    这可能会对您有所帮助。你也可以看看这个:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/decay-functions.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 2012-07-18
      相关资源
      最近更新 更多