mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-07 14:02:48 +00:00
feat: support geo shape filter
This commit is contained in:
@@ -45,6 +45,7 @@
|
||||
"express-prometheus-middleware": "1.2.0",
|
||||
"express-promise-router": "4.1.0",
|
||||
"fs-extra": "9.1.0",
|
||||
"geojson": "0.5.0",
|
||||
"got": "11.8.2",
|
||||
"moment": "2.29.1",
|
||||
"morgan": "1.10.0",
|
||||
|
||||
@@ -24,6 +24,7 @@ import {
|
||||
// @elastic/elasticsearch package
|
||||
// tslint:disable-next-line:no-implicit-dependencies
|
||||
import {NameList} from 'elasticsearch';
|
||||
import {Polygon} from 'geojson';
|
||||
|
||||
/**
|
||||
* An elasticsearch aggregation bucket
|
||||
@@ -418,6 +419,26 @@ export interface ESGeoDistanceFilter {
|
||||
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
|
||||
* @see https://www.elastic.co/guide/en/elasticsearch/reference/5.6/query-dsl-bool-query.html
|
||||
|
||||
@@ -28,7 +28,7 @@ import {
|
||||
import {
|
||||
ElasticsearchConfig,
|
||||
ESDateRange,
|
||||
ESDateRangeFilter, ESGenericRange, ESNumericRangeFilter,
|
||||
ESDateRangeFilter, ESGenericRange, ESGeoShapeFilter, ESNumericRangeFilter,
|
||||
ESRangeFilter,
|
||||
ScriptSort,
|
||||
} from './common';
|
||||
@@ -177,6 +177,15 @@ export function buildFilter(filter: SCSearchFilter):
|
||||
dateRangeFilter.range[filter.arguments.field] = dateRangeObject;
|
||||
|
||||
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