0

Python 2.7 とelasticsearch-py.

次の JSON が与えられます。

[
    {
        "Name":
        "Addresses": [
            "StreetAdd": "xxx",
            "GeoLocation": {
                "lat": xx,
                "long": yy
            }
        ]
    },
    {
        // And so on.
    }   
]

そして、次のマッピング:

mapping = {
    "mappings": {
        "leads": {
            "properties": {
                "Addresses": {
                    "type": "nested",
                    "include_in_parent": "true",
                    "properties": {
                        "GeoLocation": "geo_point"
                    }
                }
            }
        }
    }
}

緯度 40 度、経度 -70 度から 10 km 以内の場所を取得するにはどうすればよいですか? 私の試みは次のとおりです。

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"]

ただし、これにより次のエラーがスローされます。

...
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')

まだ ES に習熟していないので、この問題にアプローチするためにどのスキーマを使用すればよいかを考えるのに苦労しています。

何を与える?

4

1 に答える 1

1

問題はマッピングにあります。修正版はこちら

mapping = {
    "mappings": {
        "leads": {
            "properties": {
                "Addresses": {
                    "type": "nested",
                    "include_in_parent": "true",
                    "properties": {
                        "GeoLocation": {
                            "type":"geo_point" <-- Note the type here
                        }
                    }
                }
            }
        }
    }
}
于 2016-04-01T04:08:16.377 に答える