feat: add support for multiple values in value filter

This commit is contained in:
Wieland Schöbl
2021-04-07 11:40:28 +02:00
committed by Rainer Killinger
parent 15ac0e2f59
commit de60311bd0
4 changed files with 200 additions and 82 deletions

252
package-lock.json generated
View File

@@ -420,95 +420,169 @@
}
},
"@openstapps/core": {
"version": "0.42.0",
"resolved": "https://registry.npmjs.org/@openstapps/core/-/core-0.42.0.tgz",
"integrity": "sha512-s9mDC3GoOj1NOsjJ4OzzUeqsQVDoqt84IYkG0Y69BJ+4qoZuOvOe5hSOp3L8Nkj1P82jp/q0qjO/63cMphp2yw==",
"version": "0.44.0",
"resolved": "https://registry.npmjs.org/@openstapps/core/-/core-0.44.0.tgz",
"integrity": "sha512-yR3ZltDRgeU0JJVPpVcwzQCXnmH2ZmWNGnXEFV/Qz+XHR7Ki8nf0YE/GohTG59AFT5GwPwsIPB+PUZ4u5v3qqQ==",
"requires": {
"@openstapps/core-tools": "0.17.0",
"@openstapps/core-tools": "0.19.0",
"@types/geojson": "1.0.6",
"@types/json-patch": "0.0.30",
"@types/json-schema": "7.0.7",
"@types/node": "10.17.44",
"@types/node": "14.14.37",
"fast-clone": "1.5.13",
"fast-deep-equal": "3.1.3",
"http-status-codes": "2.1.4",
"json-patch": "0.7.0",
"json-schema": "0.2.5",
"json-schema": "0.3.0",
"ts-optchain": "0.1.8"
},
"dependencies": {
"@openstapps/core-tools": {
"version": "0.17.0",
"resolved": "https://registry.npmjs.org/@openstapps/core-tools/-/core-tools-0.17.0.tgz",
"integrity": "sha512-YL0++bjhBEVb5qMHYdzCUgUb23ZGbqgkpCIHMUY5CuEZb2TUvP5HO1s1/7s/VpVVzE8lSqFqPGmeSBpHgs0K3g==",
"version": "0.19.0",
"resolved": "https://registry.npmjs.org/@openstapps/core-tools/-/core-tools-0.19.0.tgz",
"integrity": "sha512-IJYa38e6FPgKd/YrmvP3Bubsc61yvC66X4vW/V+1ZsxG5PlUiMngXJ7eEVkl355ICQIeGp1VUhQkEJfOpaG1WQ==",
"requires": {
"@krlwlfrt/async-pool": "0.3.0",
"@openstapps/logger": "0.5.0",
"@types/glob": "7.1.1",
"@types/got": "9.6.9",
"@types/json-schema": "7.0.6",
"@types/mustache": "4.0.0",
"@types/node": "10.17.21",
"ajv": "6.11.0",
"better-ajv-errors": "0.6.7",
"chai": "4.2.0",
"@openstapps/logger": "0.6.0",
"@types/glob": "7.1.3",
"@types/got": "9.6.11",
"@types/json-schema": "7.0.7",
"@types/mustache": "4.1.1",
"@types/node": "14.14.37",
"ajv": "6.12.6",
"better-ajv-errors": "0.7.0",
"chai": "4.3.4",
"commander": "4.1.1",
"deepmerge": "4.2.2",
"del": "5.1.0",
"flatted": "2.0.1",
"flatted": "2.0.2",
"glob": "7.1.6",
"got": "10.5.5",
"got": "10.7.0",
"humanize-string": "2.1.0",
"json-schema": "0.2.5",
"mustache": "4.0.0",
"json-schema": "0.3.0",
"mustache": "4.2.0",
"plantuml-encoder": "1.4.0",
"toposort": "2.0.2",
"ts-json-schema-generator": "0.60.0",
"ts-node": "8.6.2",
"ts-json-schema-generator": "0.70.2",
"ts-node": "8.10.2",
"typedoc": "0.18.0",
"typescript": "3.8.3"
}
},
"@openstapps/logger": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/@openstapps/logger/-/logger-0.6.0.tgz",
"integrity": "sha512-l/ILWPOSxhawcdDxn9vkdzib4xlRTnFmG4YygX8l8z0m9cocitMMZGw/DquZ0x6zGt2suOwSVRckYiSlk/6Erw==",
"requires": {
"@types/node": "14.14.37",
"@types/nodemailer": "6.4.1",
"chalk": "4.1.0",
"flatted": "3.1.1",
"moment": "2.29.1",
"nodemailer": "6.5.0"
},
"dependencies": {
"@types/json-schema": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
"integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw=="
},
"@types/node": {
"version": "10.17.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz",
"integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ=="
"flatted": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
"integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA=="
}
}
},
"@types/got": {
"version": "9.6.9",
"resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.9.tgz",
"integrity": "sha512-w+ZE+Ovp6fM+1sHwJB7RN3f3pTJHZkyABuULqbtknqezQyWadFEp5BzOXaZzRqAw2md6/d3ybxQJt+BNgpvzOg==",
"@sindresorhus/is": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz",
"integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg=="
},
"@types/glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
"integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
"requires": {
"@types/node": "*",
"@types/tough-cookie": "*",
"form-data": "^2.5.0"
"@types/minimatch": "*",
"@types/node": "*"
}
},
"@types/node": {
"version": "10.17.44",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.44.tgz",
"integrity": "sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw=="
"@types/mustache": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/@types/mustache/-/mustache-4.1.1.tgz",
"integrity": "sha512-Sm0NWeLhS2QL7NNGsXvO+Fgp7e3JLHCO6RS3RCnfjAnkw6Y1bsji/AGfISdQZDIR/AeOyzkrxRk9jBkl55zdJw=="
},
"chai": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"requires": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.2",
"deep-eql": "^3.0.1",
"get-func-name": "^2.0.0",
"pathval": "^1.1.0",
"type-detect": "^4.0.5"
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"better-ajv-errors": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/better-ajv-errors/-/better-ajv-errors-0.7.0.tgz",
"integrity": "sha512-6GtJQ/AwVSo1pI1MDQU/yg8O86gMsrt5RKtELo08Epa2zWJPCOK85v/O8/U5A9JkWmwRkE16JpSgssKSx6moog==",
"requires": {
"@babel/code-frame": "^7.0.0",
"@babel/runtime": "^7.0.0",
"chalk": "^2.4.1",
"core-js": "^3.2.1",
"json-to-ast": "^2.0.3",
"jsonpointer": "^4.0.1",
"leven": "^3.1.0"
},
"dependencies": {
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"requires": {
"color-convert": "^1.9.0"
}
},
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
}
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"requires": {
"has-flag": "^3.0.0"
}
}
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"requires": {
"color-name": "1.1.3"
}
},
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -522,12 +596,17 @@
"mimic-response": "^2.0.0"
}
},
"flatted": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
"integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA=="
},
"got": {
"version": "10.5.5",
"resolved": "https://registry.npmjs.org/got/-/got-10.5.5.tgz",
"integrity": "sha512-B13HHkCkTA7KxyxTrFoZfrurBX1fZxjMTKpmIfoVzh0Xfs9aZV7xEfI6EKuERQOIPbomh5LE4xDkfK6o2VXksw==",
"version": "10.7.0",
"resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz",
"integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==",
"requires": {
"@sindresorhus/is": "^1.0.0",
"@sindresorhus/is": "^2.0.0",
"@szmarczak/http-timer": "^4.0.0",
"@types/cacheable-request": "^6.0.1",
"cacheable-lookup": "^2.0.0",
@@ -536,25 +615,57 @@
"duplexer3": "^0.1.4",
"get-stream": "^5.0.0",
"lowercase-keys": "^2.0.0",
"mimic-response": "^2.0.0",
"mimic-response": "^2.1.0",
"p-cancelable": "^2.0.0",
"p-event": "^4.0.0",
"responselike": "^2.0.0",
"to-readable-stream": "^2.0.0",
"type-fest": "^0.9.0"
"type-fest": "^0.10.0"
}
},
"ts-node": {
"version": "8.6.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.6.2.tgz",
"integrity": "sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg==",
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"json-schema": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.3.0.tgz",
"integrity": "sha512-TYfxx36xfl52Rf1LU9HyWSLGPdYLL+SQ8/E/0yVyKG8wCCDaSrhPap0vEdlsZWRaS6tnKKLPGiEJGiREVC8kxQ=="
},
"mustache": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
"integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="
},
"ts-json-schema-generator": {
"version": "0.70.2",
"resolved": "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-0.70.2.tgz",
"integrity": "sha512-4miuxRyxYvwzCGGzxGvN39fwlY7HDlj1KRpZq8Hi3IegeAnguc9q4gDvcqMaDKoRiNNnV5fwplRWZFhRrtvr4Q==",
"requires": {
"arg": "^4.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"source-map-support": "^0.5.6",
"yn": "3.1.1"
"@types/json-schema": "^7.0.5",
"commander": "~5.1.0",
"glob": "~7.1.6",
"json-stable-stringify": "^1.0.1",
"typescript": "~3.9.5"
},
"dependencies": {
"commander": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
"integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="
},
"typescript": {
"version": "3.9.9",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
"integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w=="
}
}
},
"type-fest": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz",
"integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw=="
}
}
},
@@ -898,7 +1009,6 @@
"version": "9.6.11",
"resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.11.tgz",
"integrity": "sha512-dr3IiDNg5TDesGyuwTrN77E1Cd7DCdmCFtEfSGqr83jMMtcwhf/SGPbN2goY4JUWQfvxwY56+e5tjfi+oXeSdA==",
"dev": true,
"requires": {
"@types/node": "*",
"@types/tough-cookie": "*",
@@ -1001,7 +1111,6 @@
"version": "6.4.1",
"resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.1.tgz",
"integrity": "sha512-8081UY/0XTTDpuGqCnDc8IY+Q3DSg604wB3dBH0CaZlj4nZWHWuxtZ3NRZ9c9WUrz1Vfm6wioAUnqL3bsh49uQ==",
"dev": true,
"requires": {
"@types/node": "*"
}
@@ -1512,7 +1621,6 @@
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
"integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
"dev": true,
"requires": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.2",

View File

@@ -33,7 +33,7 @@
},
"dependencies": {
"@elastic/elasticsearch": "5.6.22",
"@openstapps/core": "0.42.0",
"@openstapps/core": "0.44.0",
"@openstapps/core-tools": "0.18.0",
"@openstapps/logger": "0.5.0",
"@types/node": "14.14.37",

View File

@@ -274,14 +274,21 @@ export interface ElasticsearchConfig {
/**
* An elasticsearch term filter
*/
export interface ESTermFilter {
export type ESTermFilter = {
/**
* Definition of a term to match
*/
term: {
[fieldName: string]: string;
};
}
} | {
/**
* Definition of terms to match (or)
*/
terms: {
[fieldName: string]: string[];
};
};
export interface ESGenericRange<T> {
/**
@@ -381,7 +388,7 @@ export interface ESGeoDistanceFilterArguments {
[fieldName: string]: {
/**
* Latitute
* Latitude
*/
lat: number;

View File

@@ -99,11 +99,14 @@ export function buildFilter(filter: SCSearchFilter):
switch (filter.type) {
case 'value':
const filterObj: { [field: string]: string; } = {};
filterObj[`${filter.arguments.field}.raw`] = filter.arguments.value;
return {
term: filterObj,
return Array.isArray(filter.arguments.value) ? {
terms: {
[`${filter.arguments.field}.raw`]: filter.arguments.value,
},
} : {
term: {
[`${filter.arguments.field}.raw`]: filter.arguments.value,
},
};
case 'availability':
const startRangeFilter: {
@@ -220,7 +223,7 @@ export function buildFilter(filter: SCSearchFilter):
}
/**
* Builds scorings functions from boosting config
* Builds scoring functions from boosting config
* @param boostings Backend boosting configuration for contexts and types
* @param context The context of the app from where the search was initiated
*/