2016-03-31 7 views
0

Python 2.7およびelasticsearch-pyを使用しています。私は緯度40の10キロ、経度-70以内の場所になるだろうどのようにelasticsearch-pyで地理距離でフィルタリングするにはどうすればよいですか?

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

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

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

には、以下のJSONを考えると?私が使うべきかスキーマ想定ESとはまだしないことが堪能

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

、私は苦労している:

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

をしかし、これは、次のエラーを投げている、次のように私の試みはありますこの問題に近づく。

何がありますか?

答えて

1

問題はあなたのマッピングにあります。ここには固定のバージョン

​​
+0

こんにちは、返信ありがとうございます。私はすでにマッピングを訂正したとしても、同じエラーを投げます。 'curl'を使ってテストしましょう。おそらく 'elasticsearch-py'が問題です。 – Manhattan

+0

更新されたマッピングを確認してください。また、マッピングを変更した後にドキュメントを再インデックスしましたか? – Rahul

+0

+1:これは私に半分の答えを指摘しました。マッピングは本当に間違っており、これは私を助けます。しかし、私は幾分新しい、しかし関連したエラーに直面しています: 'Addresses'プロパティを持たないレコードを挿入するにはどうしたらいいですか?私はそれをオプションにする必要がある別のマッピングプロパティですか? – Manhattan