Мне нужно посчитать количество сегментов из набора результатов, возвращенного агрегацией каналов .Проблема в том, что мой запрос, использующий селектор сценариев здесь:
POST visitor_carts/_search
{
"size": 0,
"aggs": {
"visitors": {
"terms": {"field" : "visitor_id"},
"aggs": {
"one_purchase": {
"bucket_selector": {
"buckets_path": {
"nb_purchases": "_count"
},
"script": "params.nb_purchases == 3"
}
}
}
}
}
}
возвращает что-то вроде этого:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 5,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"visitors" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "2",
"doc_count" : 3
},
{
"key" : "3",
"doc_count" : 3
}
]
}
}
}
Под ключом buckets
я вижусписок посетителей, удовлетворяющих моему условию (у каждого посетителя, обозначенного visitor_id
, должно быть ровно три документа в индексе visitor_carts
), но это не очень полезно, поскольку вместо него должны обрабатываться сотни тысяч посетителей.Я использую PHP для обработки результатов, теоретически он может считать набор результатов, но при большом количестве посетителей это кажется не самой лучшей идеей.Есть ли способ просто вывести количество допустимых интервалов рядом с doc_count_error_upper_bound
и sum_other_doc_count
?Немного странно, что в статистику агрегации не включено bucket_count
, поскольку это представляется весьма полезным.
Или, может быть, это можно сделать по-другому?Этот вопрос является продолжением этого вопроса: Получите количество пользователей, совершивших определенное количество покупок
Вот мое visitor_carts
отображение:
{
"mapping": {
"_doc": {
"dynamic": "false",
"properties": {
"created_dt": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"order_id": {
"type": "keyword"
},
"visitor_id": {
"type": "keyword"
}
}
}
}
}