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

View File

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

View File

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