У меня вопрос по агрегации. Читал про Дата Агрегирование гистограммы. Но он только сортирует документы по дате. Итак, у меня есть индекс посещения с полем Дата и посещенная_страница. И я хочу агрегировать, например, количество в час (например, пользователь, посещающий страницу в час). Будет ли использоваться агрегирование, указанное выше, или я должен как-то агрегировать по-другому?
пусть это будет струна. Мне просто нужно подсчитывать каждую посещенную_страницу ежечасно
Похоже, вам нужна агрегация с несколькими ведрами. Нашел это
Что вас интересует, так это:
GET /_search
{
"aggs" : {
"my_buckets": {
"composite" : {
"sources" : [
{ "date": { "date_histogram": { "field": "timestamp", "interval": "1d" } } },
{ "product": { "terms": {"field": "product" } } }
]
}
}
}
}
This will create composite buckets from the values created by two values source, a date_histogram and a terms. Each bucket is composed of two values, one for each value source defined in the aggregation. Any type of combinations is allowed and the order in the array is preserved in the composite buckets.
Помогает?
У меня есть исключение из вашего примера. Стоит ли добавлять метаданные в индекс для такого рода агрегатов? SearchParseException [Не удалось найти тип агрегатора [составной] в [my_buckets]];
@Shioshin какую версию ES вы используете? Как вы можете видеть в документации, этот тип агрегирования - это состояние в бета-версии, и похоже, что он был впервые представлен в 6.1.
Запрос должен быть таким, как показано ниже:
GET {index_name}/{type}/_search
{
"size": 0, // no need to display search result, can boost query speed
"aggs": {
"unique_visited_page": {
"terms": {
"field": "visited_page" // this must be indexed with keyword type
},
"aggs": {
"visit_page_per_hour" : {
"date_histogram" : {
"field" : "date_field",
"interval" : "hour"
}
}
}
}
}
}
Сначала мы агрегируем по посещенная_страница, затем по каждому посещенная_страница, детализируем его за час, чтобы получить количество.
Пример ответа с использованием моих образцов данных
{
...
"hits": {
"total": 4,
"max_score": 0,
"hits": []
},
"aggregations": {
"unique_visited_page": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "contact.html",
"doc_count": 2,
"visit_page_per_hour": {
"buckets": [
{
"key_as_string": "2018-07-24T14:00:00.000Z",
"key": 1532440800000,
"doc_count": 1
},
{
"key_as_string": "2018-07-24T15:00:00.000Z",
"key": 1532444400000,
"doc_count": 1
}
]
}
},
{
"key": "index.html",
"doc_count": 1,
"visit_page_per_hour": {
"buckets": [
{
"key_as_string": "2018-07-24T13:00:00.000Z",
"key": 1532437200000,
"doc_count": 1
}
]
}
},
{
"key": "page.html",
"doc_count": 1,
"visit_page_per_hour": {
"buckets": [
{
"key_as_string": "2018-07-24T13:00:00.000Z",
"key": 1532437200000,
"doc_count": 1
}
]
}
}
]
}
}
}
Ключ результата - это наше значение посещенная_страница, тогда оно будет агрегироваться за час и вернет doc_count. doc_count, возможно, то значение, которое вам нужно.
Надеюсь, поможет.
Наконец-то удалось проверить свой ответ. Было несколько проблем, но решил их. Это именно то, что мне нужно. Большое спасибо за Вашу помощь
что такое тип посещенной_страницы? целое число? нить? не могли бы вы привести пример данных?