feat: support geo shape filter

This commit is contained in:
Wieland Schöbl
2021-06-22 11:36:59 +02:00
parent 7106996cc3
commit dd8a6b3abc
3 changed files with 32 additions and 1 deletions

View File

@@ -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",

View File

@@ -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

View File

@@ -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;
}
}