2016-11-20 12 views
0

私はElasticSearchで初心者です。ジオポイント(緯度/経度)のリストがジオポイントのリストに存在するかどうかをテストしようとしています。例えばElasticSearchで私を助ける人を探してください

私はこのgeopoint与える:

"lat": 49.01536940596998 
"lon": 2.4967825412750244 

を、私はこの点は、以下のリストに存在するかどうかをテストします。ありがとう。

"positions": [ 
    { 
     "millis": 12959023, 
     "lat": 49.01525113731623, 
     "lon": 2.4971945118159056, 
     "rawX": -3754, 
     "rawY": 605, 
     "rawVx": 0, 
     "rawVy": 0, 
     "speed": 9.801029291617944, 
     "accel": 0.09442740907572084, 
     "grounded": true 
    }, 
    { 
     "millis": 12959914, 
     "lat": 49.01536940596998, 
     "lon": 2.4967825412750244, 
     "rawX": -3784, 
     "rawY": 619, 
     "rawVx": -15, 
     "rawVy": 7, 
     "speed": 10.841861737855924, 
     "accel": -0.09534648619563282, 
     "grounded": true 
    } 
... 
} 

答えて

1

オブジェクトの配列を検索するには、nested data typeを使用する必要があります。リンクされたページが説明しているように、配列の内部要素を独立したものにするために、デフォルトのマッピングを使用することはできません。まず、マッピングを更新する必要があります。

注:マッピングは新しいインデックスにのみ有効です。 Reference.

PUT YOUR_INDEX 
{ 
    "mappings": { 
    "YOUR_TYPE": { 
     "properties": { 
     "positions": { 
      "type": "nested" 
     } 
     } 
    } 
    } 
} 

今、私たちはデータを照会することができます。 bool queryを探しています。これは他のクエリ(あなたの場合はterm queries)を組み合わせています。

POST _search 
{ 
    "query": { 
    "nested": { 
     "path": "positions", 
     "query": { 
     "bool" : { 
      "must" : [ 
      { "term" : { "lat": 49.01536940596998 } }, 
      { "term" : { "lon": 2.4967825412750244 } } 
      ] 
     } 
     } 
    } 
    } 
} 
+2

マッピングを変更しているので、緯度/経度値の 'geo_point'フィールドを同時に導入しないでください。 – Val

+0

@fylieおかげで私たちのために働いていますが、実際にはたくさんのデータ(ポジション)を持つ大きなドキュメントを作成しています。このドキュメントをsense extension Itから直接追加しようとすると、この大きなデータelasticsearchと、結果の取得に時間がかかるため、リクエスト時間を最適化する方法もあります。 – Taybou

+0

@Val、緯度/経度値の 'geo_point'フィールドを導入しようとしましたが、位置が多くの他のフィールドで構成されているため、できなかったというエラーが表示されます – Taybou

関連する問題