Elasticsearch: Added support for calendar_interval in ES date histogram queries (#75459)

* Introduce support for calendar intervals in ES date histogram queries

* Add missing undef type check for ES calendar interval query support
This commit is contained in:
NikolayTsvetkov
2023-10-09 12:37:38 +02:00
committed by GitHub
parent 07266aa983
commit ce462e8cd7
5 changed files with 98 additions and 21 deletions

View File

@@ -899,6 +899,25 @@ describe('ElasticQueryBuilder', () => {
expect(query.aggs['2'].date_histogram.interval).toBeUndefined();
expect(query.aggs['2'].date_histogram.fixed_interval).toBe('1d');
});
it('should use calendar_interval', () => {
const query = builder.build({
refId: 'A',
metrics: [{ type: 'count', id: '1' }],
timeField: '@timestamp',
bucketAggs: [
{
type: 'date_histogram',
id: '2',
field: '@time',
settings: { min_doc_count: '1', interval: '1w' },
},
],
});
expect(query.aggs['2'].date_histogram.interval).toBeUndefined();
expect(query.aggs['2'].date_histogram.calendar_interval).toBe('1w');
});
});
});
});

View File

@@ -100,6 +100,7 @@ export class ElasticQueryBuilder {
getDateHistogramAgg(aggDef: DateHistogram) {
const esAgg: any = {};
const settings = aggDef.settings || {};
const calendarIntervals: string[] = ['1w', '1M', '1q', '1y'];
esAgg.field = aggDef.field || this.timeField;
esAgg.min_doc_count = settings.min_doc_count || 0;
@@ -115,7 +116,11 @@ export class ElasticQueryBuilder {
const interval = settings.interval === 'auto' ? '${__interval_ms}ms' : settings.interval;
esAgg.fixed_interval = interval;
if (interval !== undefined && calendarIntervals.includes(interval)) {
esAgg.calendar_interval = interval;
} else {
esAgg.fixed_interval = interval;
}
return esAgg;
}