Я хочу сравнить два сегмента друг с другом и найти новые вхождения, которые появляются во втором сегменте. Приведенный ниже запрос возвращает все записи в поле «query.keyword» между двумя предоставленными метками времени UNIX, но я хочу, чтобы метки времени UNIX были отделены от самого раздела агрегации.
GET _search
{
"size": 0,
"query": {
"range" :{
"ts": {
"gte":1535155200,
"lte":1535414399
}
}
},
"aggs": {
"domains": {
"terms": {
"field":"query.keyword"
}
}
}
}
Я тоже пробовал это, но получил ошибку:
"Found two aggregation type definitions in [domains_prev]: [range] and [terms]",
GET _search
{
"size": 0,
"aggs": {
"domains_prev": {
"range" :{
"field":"ts",
"ranges": [
{"to" : 1535414399},
{"from" : 1535155200}
]
},
"terms": {
"field":"query.keyword"
}
}
}
}
Цель состоит в том, чтобы иметь что-то похожее на это:
Agg1
"domains_prev"
"field":"query.keyword"
date:gte:timestamp, lte:timestamp
Agg2
"domains_today"
"field":"query.keyword"
date:today
show all "query.keyword" in agg2 that does not appear in agg1.
Это SQL-запрос, который я использую для достижения желаемого результата:
select domains FROM table WHERE date >= 20171123 and domains NOT IN (SELECT domains FROM table WHERE date < 20171123 group by domains)