2017-03-08 3 views
0

飛行を表す複数のgeo_pointフィールドがあります。地点の少なくとも1つを地理的にフィルタリングする必要があります。ElasticSearchの複数のフィールドの地理的フィルタ

boolまたは句がない解決法はありますか?

インデックスマッピング:

"Flight":{ 
       "properties":{ 
        ... 
        "point_src":{"type":"geo_point"}, 
        "point_dest":{"type":"geo_point"}, 
        ... 
       } 
      } 

サンプル文書:

{ 
      "point_dest": [ 
      { 
       "lat": 50.110922, 
       "lon": 8.682127 
      } 
      ], 
      "point_src": [ 
      { 
       "lat": 33.893791, 
       "lon": 35.501777 
      } 
      ] 
     } 
+0

サンプルドキュメントを追加できますか? – user3775217

+0

@ user3775217が追加されました – aclokay

答えて

0

excatドキュメントのためにあなたを求めた理由は、あなたが一致することができますどのように多くのgeo_points見つけることです。私は現在、2つのgeo_pointしか持っていないので、次のクエリを実行できます。あなたの代わりにこれらの二つの文書に複数のgeo_pointsを持っているならば再び - Geo_distanceクエリと

{ 
    "query": { 
     "bool": { 
      "should": [{ 
       "bool": { 
        "filter": { 
         "geo_distance" : { 
        "distance" : "20000000km", 
        "point_src" : { 
         "lat" : 40, 
         "lon" : -70 
        } 
       } 
        } 
       } 
      }, 
      { 
       "bool": { 
        "filter": { 
         "geo_distance" : { 
        "distance" : "200km", 
        "point_dest" : { 
         "lat" : 40, 
         "lon" : -70 
        } 
       } 
        } 
       } 
      }] 
     } 
    } 
} 

注ブールなければなりません。私はgeo_pointタイプの場所に各アイテムがある場所のネストされたタイプを持っていることを示唆しました。nested_queryは上記と同じように動作します。ネストされた値から1つだけ一致すると、資料。

{ 
    "settings": { 
     "analysis": {} 
    }, 
    "mappings": { 
     "product": { 
      "dynamic": "strict", 
      "properties": { 
       "locations": { 
        "type": "nested", 
        "properties": { 
         "point": { 
          "type": "geo_point" 
         } 
        } 
       } 
      } 
     } 
    } 
} 
関連する問題