Elasticsearch термин агрегация и диапазон с отметкой времени - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь подсчитать количество журналов, сгруппированных по пользовательскому агенту.

Это то, что у меня есть.

GET /myindex/_search
{
  "size": 30,
  "stored_fields": ["req.headers.user-agent.keyword"],
  "aggs": {
    "group_by_userAgent": {
      "terms": {
        "field": "req.headers.user-agent.keyword"
      }
    }
  }
}

Я хотел добавить функцию "Запрос последних 15 минут".Я попытался добавить запрос 'range', и я закончил следующий запрос, который не работает.

GET /myindex/_search
{
  "size": 30,
  "stored_fields": ["req.headers.user-agent.keyword"],


  "aggs": {

    "group_by_userAgent": {
      "terms": {
        "field": "req.headers.user-agent.keyword"
      },
      "range": {
        "timestamp": {
          "gt": "now-15m"
        }
      }
    }
  }
}

Как запросить агрегирование терминов с диапазоном с синтаксисом now-x15min?

Ответы [ 3 ]

1 голос
/ 15 марта 2019

range должен входить в раздел запроса, а не в аггс.Временной диапазон хорош, так как он

Я думаю, что вы ищете, это количество документов в первых 30 корзинах пользовательских агентов, то есть 30 лучших пользовательских агентов, производящих наибольшее количество журналов

GET /myindex/_search
{
  "size": 0,
  "query": {
    "range": {
      "@timestamp": {
        "gt": "now-15m"
      }
    }
  },
  "aggs": {
    "group_by_userAgent": {
      "terms": {
        "field": "req.headers.user-agent.keyword",
        "size": 30
      }
    }
  }
}
1 голос
/ 15 марта 2019

вы можете сделать это двумя способами, чтобы получить результаты агрегирования для user-agent.

POST phrase_index/_search
{
  "aggs": {
    "date_range_filtered_agg": {
      "filter": {
        "range": {
          "timestamp": {
            "gte": "now-15m/m"
          }
        }
      },
      "aggs": {
        "group_by_userAgent": {
          "terms": {
            "field": "req.headers.user-agent.keyword",
            "size": 10
          }
        }
      }
    }
  },
  "size": 30,
  "stored_fields": ["req.headers.user-agent.keyword"]
}


POST phrase_index/_search
{
  "query": {
    "range": {
      "timestamp": {
        "gte": "now-15m/m"
      }
    }
  },
  "aggs": {
    "group_by_userAgent": {
      "terms": {
        "field": "req.headers.user-agent.keyword",
        "size": 10
      }
    }
  },
  "size": 30,
  "stored_fields": ["req.headers.user-agent.keyword"]
}
1 голос
/ 15 марта 2019

Для применения запроса диапазона необходимо сначала объединение фильтров, а затем добавьте подгруппу терминов.

См .: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html

...