所以我有一个地图点索引,我需要在其中添加一些数据。但是似乎没有将我的数据注册为pin.location的有效输入。
我已经尽力从https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-query.html 仍然不起作用
这是我设置索引的地方:
mappings = {
"mappings": {
"properties": {
"pin": {
"properties": {
"location": {
"type": "geo_point"
}
}
},
"index.mapping.single_type": False
}
}
}
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])
if not es.indices.exists(index="groups_map"):
es.indices.create(index='groups_map', body=mappings)
es.index(index='groups_map', id=data["id"], doc_type='groups_map', body=data, request_timeout=30)
这是数据:
data = {
"pin": {
"properties": {"location": {
"type": "geo_point",
'lat': request.POST['source_lat'],
'lon': request.POST['source_lon']}
}
},
"id": instance.id,
}
这是我的查询数据,这里只是一本包含经纬度值的字典
query = {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"geo_distance": {
"distance": "12km",
"pin.location": {
"lat": data["lat"],
"lon": data["lon"]
}
}
}
}
}
return es.search(index="groups_map", body={"query": query}, size=20)
这是我得到的全部错误: elasticsearch.exceptions.RequestError:RequestError(400,'search_phase_execution_exception','找不到geo_point字段[pin.location]')
答案 0 :(得分:2)
问题在于您的数据不正确,因为您需要拔出properties
键。您的数据应如下所示。
data = {
"pin": {
"location": {
'lat': request.POST['source_lat'],
'lon': request.POST['source_lon']
}
},
"id": instance.id,
}
注意:索引新数据之前,您需要删除并重新创建索引。