2017-10-20 25 views
0

Est-il possible d'utiliser une agrégation max ou min sur un champ geo_point?Utiliser l'agrégation max/min sur un type de champ geo_point

J'ai essayé de max directement sur ma propriété de coordonnées qui est de type geo_point

{ 
    "size": 0, 
    "aggs" : { 
     "max_lat" : { "max" : { "field" : "coordinate" } } 
    } 
} 

cela renvoie naturellement un ClassCastException et j'ai donc essayé d'exécuter la requête directement sur les lat ou lon champs de coordinate qui sont de type double.

{ 
    "size": 0, 
    "aggs" : { 
     "max_lat" : { "max" : { "field" : "coordinate.lat" } }, 
     "max_lon" : { "max" : { "field" : "coordinate.lon" } } 
    } 
} 

Maintenant, je ne reçois pas le ClassCastExcxeption et la requête retourne un 200 mais les agrégations sont nuls.

Réponse:

{ 
    "aggregations": { 
     "max_lat": { 
      "value": null 
     }, 
     "max_lon": { 
      "value": null 
     } 
    } 
} 

En utilisant ElasticSearch v1.7

Répondre

0

Vous pouvez utiliser les agrégations de script suivant:

{ 
    "size": 0, 
    "aggs": { 
    "min_lat": { "min": { "script": "doc['coordinate'].lat" } }, 
    "max_lat": { "max": { "script": "doc['coordinate'].lat" } }, 
    "min_lon": { "min": { "script": "doc['coordinate'].lon" } }, 
    "max_lon": { "max": { "script": "doc['coordinate'].lon" } } 
    } 
} 

Je ne sais pas comment vous utilisez les résultats, mais le il peut également être utile d'éviter d'utiliser un script:

"viewport": { "geo_bounds": { "field": "coordinate" } } 
"centroid": { "geo_centroid": { "field": "coordinate" } }