mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-22 09:32:41 +00:00
feat: support geo shape filter
This commit is contained in:
@@ -45,6 +45,7 @@
|
|||||||
"express-prometheus-middleware": "1.2.0",
|
"express-prometheus-middleware": "1.2.0",
|
||||||
"express-promise-router": "4.1.0",
|
"express-promise-router": "4.1.0",
|
||||||
"fs-extra": "9.1.0",
|
"fs-extra": "9.1.0",
|
||||||
|
"geojson": "0.5.0",
|
||||||
"got": "11.8.2",
|
"got": "11.8.2",
|
||||||
"moment": "2.29.1",
|
"moment": "2.29.1",
|
||||||
"morgan": "1.10.0",
|
"morgan": "1.10.0",
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import {
|
|||||||
// @elastic/elasticsearch package
|
// @elastic/elasticsearch package
|
||||||
// tslint:disable-next-line:no-implicit-dependencies
|
// tslint:disable-next-line:no-implicit-dependencies
|
||||||
import {NameList} from 'elasticsearch';
|
import {NameList} from 'elasticsearch';
|
||||||
|
import {Polygon} from 'geojson';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An elasticsearch aggregation bucket
|
* An elasticsearch aggregation bucket
|
||||||
@@ -418,6 +419,26 @@ export interface ESGeoDistanceFilter {
|
|||||||
geo_distance: ESGeoDistanceFilterArguments;
|
geo_distance: ESGeoDistanceFilterArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An Elasticsearch geo shape filter
|
||||||
|
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-geo-shape-query.html
|
||||||
|
*/
|
||||||
|
export interface ESGeoShapeFilter {
|
||||||
|
[fieldName: string]: {
|
||||||
|
/**
|
||||||
|
* Relation of the two shapes
|
||||||
|
*
|
||||||
|
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-geo-shape-query.html#_spatial_relations
|
||||||
|
*/
|
||||||
|
relation: 'intersects' | 'disjoint' | 'within' | 'contains';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Geo Shape
|
||||||
|
*/
|
||||||
|
shape: Polygon;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter arguments for an elasticsearch boolean filter
|
* Filter arguments for an elasticsearch boolean filter
|
||||||
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-bool-query.html
|
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-bool-query.html
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import {
|
|||||||
import {
|
import {
|
||||||
ElasticsearchConfig,
|
ElasticsearchConfig,
|
||||||
ESDateRange,
|
ESDateRange,
|
||||||
ESDateRangeFilter, ESGenericRange, ESNumericRangeFilter,
|
ESDateRangeFilter, ESGenericRange, ESGeoShapeFilter, ESNumericRangeFilter,
|
||||||
ESRangeFilter,
|
ESRangeFilter,
|
||||||
ScriptSort,
|
ScriptSort,
|
||||||
} from './common';
|
} from './common';
|
||||||
@@ -177,6 +177,15 @@ export function buildFilter(filter: SCSearchFilter):
|
|||||||
dateRangeFilter.range[filter.arguments.field] = dateRangeObject;
|
dateRangeFilter.range[filter.arguments.field] = dateRangeObject;
|
||||||
|
|
||||||
return dateRangeFilter;
|
return dateRangeFilter;
|
||||||
|
case 'geo':
|
||||||
|
const geoShapeObject: ESGeoShapeFilter = {
|
||||||
|
[filter.arguments.field]: {
|
||||||
|
shape: filter.arguments.shape,
|
||||||
|
relation: filter.arguments.spatialRelation,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return geoShapeObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user