Utilisation de Python 2.7 et elasticsearch-py
.Comment filtrer par géo-distance dans elasticsearch-py?
Compte tenu de la JSON suivante:
[
{
"Name":
"Addresses": [
"StreetAdd": "xxx",
"GeoLocation": {
"lat": xx,
"long": yy
}
]
},
{
// And so on.
}
]
Et le mapping suivant:
mapping = {
"mappings": {
"leads": {
"properties": {
"Addresses": {
"type": "nested",
"include_in_parent": "true",
"properties": {
"GeoLocation": "geo_point"
}
}
}
}
}
}
Comment pourrais-je obtenir les emplacements de 10 km de latitude 40, longitude -70? Ma tentative est la suivante:
search_body = {
"query" : {
"filtered": {
"query": {
"match_all" : { }
},
"filter": {
"geo_distance": {
"distance": "10km",
"Addresses.GeoLocation": {
"lat": 40.0,
"lon": -70.0
}
}
}
}
},
"size": 50
}
result = es.search(index=ES_INDEX, body=search_body, sort="Name:asc")
for hit in result["hits"]["hits"]:
print hit["_source"]["Name"]
Cependant, cela jette l'erreur suivante:
...
C:\Users\xxx\AppData\Local\Continuum\Anaconda2\lib\site-packages\elasticsearch\connection\base.pyc in _raise_error(self, status_code, raw_data)
103 pass
104
--> 105 raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
106
107
RequestError: TransportError(400, u'search_phase_execution_exception')
Pas encore que compétent avec ES, donc je vais avoir du mal à envisager ce schéma que je devrais utiliser aborder ce problème.
Ce qui donne?
Salut, merci pour la réponse. Il lance toujours la même erreur, même si j'ai déjà corrigé le mapping. Laissez-moi le tester en utilisant curl. Peut-être que 'elasticsearch-py' est le problème. – Manhattan
Veuillez vérifier le mappage mis à jour. Avez-vous réindexé des documents après avoir modifié le mappage? – Rahul
+1: Cela m'a indiqué une demi-réponse: le mapping est en effet incorrect et cela m'aidera. Cependant, je rencontre une erreur quelque peu nouvelle mais liée: comment puis-je insérer des enregistrements sans la propriété 'Addresses' étant donné que ce mappage est requis pour toutes les autres entrées avec la propriété' Addresses'? Est-ce une autre propriété de mappage dont j'ai besoin pour la rendre facultative? – Manhattan