QueryParsingException无法找到geo_point字段

时间:2015-03-04 14:22:18

标签: elasticsearch

我收到了QueryParsingException[[listings] failed to find geo_point field [location.coords]]; }]并且无法弄清楚原因。

我的查询

esClient.search({
    index: 'listings',
    body: {
        query: {
            filtered: {
                query: {
                    match_all: {}
                },
                filter: {
                    geo_distance: {
                        distance: '10km',
                        'location.coords': {
                            lat: parseFloat(query.point.lat),
                            lon: parseFloat(query.point.lon)
                        }
                    }
                }
            }
        }
    }
}, function(err, response) {
    if(err) return console.log(err);
    console.log(response);
});

我的映射(如你所见,我确实使用了geo_point类型)

    body: {
        properties: {
            location: {
                type: 'object',
                properties: {
                    country: {
                        type: 'integer'
                    },
                    address: {
                        type: 'string'
                    },
                    suburb: {
                        type: 'string'
                    },
                    coords: {
                        type: 'geo_point',
                        precision: '3m'
                    }
                }
            }
        }
    }

编辑:

在查找http://localhost:9200/listings/_mapping/my-mapping后,我注意到coords字段的lat,lon设置为double - 这可能与它有关。

json response

1 个答案:

答案 0 :(得分:1)

好的,事实证明这是因为我如何定义geo_point的精度(需要包含在fielddata属性中),奇怪的是JS api我使用了没有扔掉我记得的任何错误:

<强>正确:

coords: {
    type: 'geo_point',
    fielddata: {
        format: 'compressed',
        precision: '3m'
    }
}

<强>不正确:

coords: {
        type: 'geo_point',
        precision: '3m'
    }
}

瞧......

correct geopoint mapping