Verwenden von Python 2.7 und elasticsearch-py
.Wie filtere ich nach Geo-Distanz in elasticsearch-py?
die folgende JSON Gegeben:
[
{
"Name":
"Addresses": [
"StreetAdd": "xxx",
"GeoLocation": {
"lat": xx,
"long": yy
}
]
},
{
// And so on.
}
]
Und die folgende Abbildung:
mapping = {
"mappings": {
"leads": {
"properties": {
"Addresses": {
"type": "nested",
"include_in_parent": "true",
"properties": {
"GeoLocation": "geo_point"
}
}
}
}
}
}
Wie würde ich die Orte innerhalb von 10 km von Breitengraden bekommen 40, Längengrad -70? Mein Versuch ist wie folgt:
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"]
Dies ist jedoch der folgende Fehler zu werfen:
...
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')
Nicht, dass beherrschen noch mit ES, so dass ich eine harte Zeit Vorstellungsvermögen haben, was Schema sollte ich verwenden um dieses Problem anzugehen.
Was gibt?
Hallo, vielen Dank für die Antwort. Es wirft immer noch den gleichen Fehler auf, auch wenn ich das Mapping bereits korrigiert habe. Lass es mich mit 'curl' testen. Vielleicht ist "elasticsearch-py" das Problem. – Manhattan
Bitte überprüfen Sie das aktualisierte Mapping. Haben Sie Dokumente nach dem Ändern des Mappings neu indiziert? – Rahul
+1: Dies hat mich auf eine halbe Antwort hingewiesen: die Zuordnung ist in der Tat falsch und das wird mir helfen. Ich stoße jedoch auf einen etwas neuen, aber damit verbundenen Fehler: Wie kann ich Datensätze ohne die Eigenschaft 'Addresses' einfügen, da diese Zuordnung für alle anderen Einträge mit der Eigenschaft 'Addresses' erforderlich ist? Ist es eine andere Zuordnungseigenschaft, die ich als optional festlegen muss? – Manhattan