ElasticSearch: агрегаты для типа ip_range - PullRequest
0 голосов
/ 17 мая 2019

У меня есть поле, которое определено в отображениях как:

"route": {
  "type": "ip_range"
}

Это работает хорошо, и я вижу результаты, когда я запрашиваю ES:

"_source": {
  "ip": "65.151.40.164",
  "route": "65.151.40.0/22",
  ...
}

Теперь я хочу сделать несколько агрегаций в этом поле, и почти все, что я пробую, в конечном итоге приводит к этой ошибке:

"caused_by": {
  "type": "illegal_argument_exception",
  "reason": "Fielddata is not supported on field [route] of type [ip_range]",
  "caused_by": {
    "type": "illegal_argument_exception",
    "reason": "Fielddata is not supported on field [route] of type [ip_range]"
  }
}

Надеюсь, это не значит, что ES не поддерживает агрегации для ip_range? Или, если это так, как это можно сделать?

UPDATE

Как я уже сказал, до сих пор любые агрегаты, которые работают с другими типами (включая ip тип), не работают на ip_range.

Некоторые примеры:

{
  "size": 0,
  "aggs": {
    "routes": {
      "range": {
        "field": "route",
        "ranges": [
            {"to": "10.0.0.0/32"}
        ]
      }
    }
  }
}
{
  "size": 0,
  "aggs": {
    "routes": {
      "terms": {
        "field": "route",
        "size": 50
      }
    }
  }
}

Если кто-нибудь может указать мне на агрегат, который работает на ip_range, это было бы полезно!

1 Ответ

0 голосов
/ 17 мая 2019

Существует определенное агрегирование ip_range для типа поля ip_range, т.е. не используйте агрегацию range (только для числовых типов) и terms (только для числовых типов и типов ключевых слов):

GET /ip_addresses/_search
{
    "size": 10,
    "aggs" : {
        "routes" : {
            "ip_range" : {
                "field" : "route",
                "ranges" : [
                    {"to": "10.0.0.0/32"}
                ]
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...