Количество документов больше «x», агрегация geo_point elasticsearch

В настоящее время я делаю следующий запрос, чтобы объединить все точки с определенной точностью в эластичном поиске.

{
  "aggs": {
    "coordinates": {
      "geohash_grid": {
        "field": "properties.Geometry.geo_point",
        "precision": 12
      },
      "aggs": {
        "centroid": {
          "geo_centroid": {
            "field": "properties.Geometry.geo_point"
          }
        }
      }
    }
  }
}

и ответ

      "aggregations": {
            "coordinates": {
              "buckets": [
                {
                  "key": "s00000000000",
                  "doc_count": 82571,
                  "centroid": {
                    "location": {
                      "lat": 0,
                      "lon": 0
                    },
                    "count": 82571
                  }
                },
                {
                  "key": "6gyf4bf8m0uh",
                  "doc_count": 58587,
                  "centroid": {
                    "location": {
                      "lat": -23.55052001774311,
                      "lon": -46.633309721946716
                    },
                    "count": 58587
                  }
                },
                {
                  "key": "7h2y8hz76g8m",
                  "doc_count": 14551,
                  "centroid": {
                    "location": {
                      "lat": -19.924501832574606,
                      "lon": -43.93523778766394
                    },
                    "count": 14551
                  }
                }
}

Мне нужно получить все ведра, количество которых больше определенного числа. Как я могу это сделать?


person Juliano Grams    schedule 18.04.2018    source источник


Ответы (2)


Вы можете добавить поле

GET _search
{
    "query": {
        "range" : {
            "age" : {
                "gte" : 5000,
            }
        }
    }
}

как описано здесь в документации: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html

person lu1her    schedule 18.04.2018
comment
Но не будет ли это просто фильтровать агрегацию? Что мне нужно, так это фильтровать ведра после агрегации. Количество полей существует только в запросе агрегации, что означает, сколько попаданий было сгруппировано. - person Juliano Grams; 18.04.2018
comment
Затем вы можете взглянуть на elastic.co/guide/en/elasticsearch/reference/current/ и elastic.co/guide/en/elasticsearch/reference/current/, чтобы фильтровать результаты, какую версию elasticjsearch вы используете? - person lu1her; 18.04.2018
comment
Я использую версию 6.2 - person Juliano Grams; 18.04.2018
comment
вам помогли мои советы? - person lu1her; 18.04.2018

Решено, я использовал следующий фильтр:

{
    "aggs": {
    "coordinates": {
      "geohash_grid": {
        "field": "properties.Geometry.geo_point",
        "precision": 12
      },
      "aggs": {
        "sales_bucket_filter": {
          "bucket_selector": {
            "buckets_path": {
              "doc_count": "centroid.count"
            },
            "script": "params.doc_count > 500"
          }
        },
        "centroid": {
          "geo_centroid": {
            "field": "properties.Geometry.geo_point"
          }
        }
      }
    }
  }
}
person Juliano Grams    schedule 18.04.2018