Skip to content
Snippets Groups Projects
Commit 0ce1a94d authored by Felipe Wu's avatar Felipe Wu
Browse files

[006] sort, datatype finalizado


Signed-off-by: default avatarFelipe Wu <felipeshiwu@gmail.com>
parent 53427b55
Branches
No related tags found
No related merge requests found
Pipeline #20110 failed
import { View } from "../core/view"; import { View } from "../core/view";
import { Source } from "../core/source"; import { Source } from "../core/source";
import { FilterOperator } from "../core/filter"; import { FilterOperator } from "../core/filter";
import { Metric } from "../core/metric";
import { Adapter } from "../core/adapter"; import { Adapter } from "../core/adapter";
import { DataType, AggregationType } from "../common/types"; import { DataType, AggregationType } from "../common/types";
import { Client, ConfigOptions } from "elasticsearch"; import { Client, ConfigOptions } from "elasticsearch";
...@@ -70,10 +71,10 @@ export class ElasticsearchAdapter extends Adapter { ...@@ -70,10 +71,10 @@ export class ElasticsearchAdapter extends Adapter {
*/ */
public getDataFromView(view: View, cb: (error: Error, result?: any[]) => void): void { public getDataFromView(view: View, cb: (error: Error, result?: any[]) => void): void {
const query = this.getQueryFromView(view); const query = this.getQueryFromView(view);
if (view.clauses.length == 0 || view.dimensions.length > 1) { if (view.clauses.length > 0 || view.dimensions.length == 1) {
this.executeQuery(view.operation.values[0].name, query, cb);
} else {
this.executeQuery(view.operation.values[0].operation.values[0].name, query, cb); this.executeQuery(view.operation.values[0].operation.values[0].name, query, cb);
} else {
this.executeQuery(view.operation.values[0].name, query, cb);
} }
} }
...@@ -129,7 +130,7 @@ export class ElasticsearchAdapter extends Adapter { ...@@ -129,7 +130,7 @@ export class ElasticsearchAdapter extends Adapter {
let partialQuery = {}; let partialQuery = {};
for (let i=0; i<view.metrics.length; i++) { for (let i=0; i<view.metrics.length; i++) {
func = this.getAggregateFunction(view.metrics[i].aggregation); func = this.getAggregateFunction(view.metrics[i].aggregation);
aggrName = func + "_" + view.metrics[i].name.toLowerCase(); aggrName = view.metrics[i].name.toLowerCase();
Object.assign(partialQuery, { [aggrName]: {[func]: {field: view.metrics[i].name}}}); Object.assign(partialQuery, { [aggrName]: {[func]: {field: view.metrics[i].name}}});
} }
return partialQuery; return partialQuery;
...@@ -138,10 +139,16 @@ export class ElasticsearchAdapter extends Adapter { ...@@ -138,10 +139,16 @@ export class ElasticsearchAdapter extends Adapter {
if (view.dimensions.length > 0) { if (view.dimensions.length > 0) {
let group_by = "group_by_" + view.dimensions[numDimensions].name; let group_by = "group_by_" + view.dimensions[numDimensions].name;
let dim = view.dimensions[numDimensions].name;
if (view.dimensions[numDimensions].dataType < 3) {
dim = dim;
} else {
dim = dim + ".keyword";
}
let aggregation = { let aggregation = {
[group_by]: { [group_by]: {
terms: { terms: {
field: view.dimensions[numDimensions].name + ".keyword", field: dim,
size: 100000 size: 100000
}, },
aggs: {} aggs: {}
...@@ -150,6 +157,11 @@ export class ElasticsearchAdapter extends Adapter { ...@@ -150,6 +157,11 @@ export class ElasticsearchAdapter extends Adapter {
Object.assign(aggregation[group_by], {aggs: returnedQuery}); Object.assign(aggregation[group_by], {aggs: returnedQuery});
if (numDimensions == view.dimensions.length - 1 && view.sort.length > 0) {
let aggrName = view.sort[0].name.toLowerCase();
Object.assign(aggregation[group_by].terms, {order: {[aggrName] : "asc"}});
}
return aggregation; return aggregation;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment