2016-08-07 10 views
0

と私はダイナモとAmazon ElasticSearchサービスを使用してAWS上で一緒に概念実証を入れている、と私はESダッシュボードをチェックし、以下を参照してくださいました基本geosearchはElasticSearch

なっていくつかの問題を抱えています。 ...

私はインデックス[assets]とマッピング[asset_types]を持っています。以下にいくつかのマッピングのサンプルが、私は地理検索は「General.location」フィールドになりたい、関連する場所

filename *string* 
checksum *string* 
added_date *date* 
General [this is a map] 
    location 
     lat *string* 
     lon *string* 
    make *string* 
    model *string* 

で、です。私は今まで何の幸運もなく、いくつかの異なる質問を試みましたが、私は明らかに何かが欠けていると確信しています。

一つは、このエラーになり、以下のように変更公式ドキュメントhere、からである: 「理由」:「検索元の解析に失敗しました、未知の検索要素[ブール]。」、

POST assets/_search 
{ 
    "bool" : { 
     "must" : { 
      "match_all" : {} 
     }, 
     "filter" : { 
      "geo_distance" : { 
       "distance" : "200km", 
       "General.location" : { 
        "lat" : 40, 
        "lon" : -70 
       } 
      } 
     } 
    } 
} 

私はまた、 『』理由」を発生させ、わずかに異なるクエリを試してみました」veは:

POST assets/_search 
{ 
    "filter" : { 
     "geo_distance" : { 
     "distance" : "1km", 
     "General.location" : { 
         "lat" : 40, 
         "lon" : -70 
        } 
     } 
    }, 
    "query" : { 
     "match_all" : {} 
    } 
} 

は私が間違ってクエリを実行しています 『geo_pointフィールドは[General.location]を見つけることができなかった』私はマッピングを更新する必要がありますか? geoを指定するインデックス-index?私はフィールドを正しくフォーマットしていれば、それは必要条件ではないと思った。

おかげ

答えて

0

は問題があなたのGeneral.locationフィールドが正しくマップされていない、あなたのマッピング、です。それはあなたがあなたがあなたがそれに応じてマッピングを変更し、データのインデックスを再作成する必要が

General [this is a map] 
    location *geo_point* 

を持っている必要がありますエラーfailed to find geo_point field

ので、代わりの

General [this is a map] 
    location 
     lat *string* 
     lon *string* 

を得る理由です。

あなたが持っている第二の問題は、あなたの最初のクエリがqueryセクションで囲む必要があることである:

POST assets/_search 
{ 
    "query" : { 
    "bool" : { 
     "must" : { 
      "match_all" : {} 
     }, 
     "filter" : { 
      "geo_distance" : { 
       "distance" : "200km", 
       "General.location" : { 
        "lat" : 40, 
        "lon" : -70 
       } 
      } 
     } 
    } 
    } 
} 

あなたは両方の問題を修正したら、あなたは正常にクエリを実行できるようになります。ヴァルは私が明示的に、このためのマッピングを作成した場所

のための新しいマッピングを作成し、言ったことに加えて

+0

ありがとうございます。あなたは正しい。私はあなたが正しいフォーマットであなたの入力を設定すると、geo_pointで読み取ることになると私は読んでいると断言することができました。そのような音はまさにそうではありませんでした。 –

+0

あなたはそれを理解してうれしい、クール! – Val

0

。そこに他の初心者のための注意、私は "General.deviceLocation"を作成するために、ネストされたプロパティの更新を使用する必要がありました。私がこれをした後、Valの更新クエリが働いた。

PUT assets/_mapping/assets_type 
{ 
    "properties": { 
    "General": { 
     "properties": { 
     "deviceLocation": { 
      "type": "geo_point" 
     } 
     } 
    }, 
    } 
}