简体   繁体   中英

how can i fix 'failed to find geo_point field [pin.location]'

so i have a index for my map points and i need to put some data in it. but it seems it does not register my data as a valid input for pin.location .

I have tried all i could get from https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-query.html and still this does not work

This is where i set the index:

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)

here is data:

data = {
        "pin": {
               "properties": {"location": {
                              "type": "geo_point",
                              'lat': request.POST['source_lat'],
                              'lon': request.POST['source_lon']}
                    }

                },
         "id": instance.id,

        }

and this is my query data here is just a dictionary with lat and lon values

 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)

this is the full error i get: elasticsearch.exceptions.RequestError: RequestError(400, 'search_phase_execution_exception', 'failed to find geo_point field [pin.location]')

The problem is that your data is not correct as you need to remove the properties key. Your data should look like this.

data = {
    "pin": {
         "location": {
               'lat': request.POST['source_lat'],
               'lon': request.POST['source_lon']
         }
    },
    "id": instance.id,
}

Note: You need to delete and recreate your index before indexing new data.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM