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": { "@openstapps/core": {
"version": "0.42.0", "version": "0.44.0",
"resolved": "https://registry.npmjs.org/@openstapps/core/-/core-0.42.0.tgz", "resolved": "https://registry.npmjs.org/@openstapps/core/-/core-0.44.0.tgz",
"integrity": "sha512-s9mDC3GoOj1NOsjJ4OzzUeqsQVDoqt84IYkG0Y69BJ+4qoZuOvOe5hSOp3L8Nkj1P82jp/q0qjO/63cMphp2yw==", "integrity": "sha512-yR3ZltDRgeU0JJVPpVcwzQCXnmH2ZmWNGnXEFV/Qz+XHR7Ki8nf0YE/GohTG59AFT5GwPwsIPB+PUZ4u5v3qqQ==",
"requires": { "requires": {
"@openstapps/core-tools": "0.17.0", "@openstapps/core-tools": "0.19.0",
"@types/geojson": "1.0.6", "@types/geojson": "1.0.6",
"@types/json-patch": "0.0.30", "@types/json-patch": "0.0.30",
"@types/json-schema": "7.0.7", "@types/json-schema": "7.0.7",
"@types/node": "10.17.44", "@types/node": "14.14.37",
"fast-clone": "1.5.13", "fast-clone": "1.5.13",
"fast-deep-equal": "3.1.3", "fast-deep-equal": "3.1.3",
"http-status-codes": "2.1.4", "http-status-codes": "2.1.4",
"json-patch": "0.7.0", "json-patch": "0.7.0",
"json-schema": "0.2.5", "json-schema": "0.3.0",
"ts-optchain": "0.1.8" "ts-optchain": "0.1.8"
}, },
"dependencies": { "dependencies": {
"@openstapps/core-tools": { "@openstapps/core-tools": {
"version": "0.17.0", "version": "0.19.0",
"resolved": "https://registry.npmjs.org/@openstapps/core-tools/-/core-tools-0.17.0.tgz", "resolved": "https://registry.npmjs.org/@openstapps/core-tools/-/core-tools-0.19.0.tgz",
"integrity": "sha512-YL0++bjhBEVb5qMHYdzCUgUb23ZGbqgkpCIHMUY5CuEZb2TUvP5HO1s1/7s/VpVVzE8lSqFqPGmeSBpHgs0K3g==", "integrity": "sha512-IJYa38e6FPgKd/YrmvP3Bubsc61yvC66X4vW/V+1ZsxG5PlUiMngXJ7eEVkl355ICQIeGp1VUhQkEJfOpaG1WQ==",
"requires": { "requires": {
"@krlwlfrt/async-pool": "0.3.0", "@krlwlfrt/async-pool": "0.3.0",
"@openstapps/logger": "0.5.0", "@openstapps/logger": "0.6.0",
"@types/glob": "7.1.1", "@types/glob": "7.1.3",
"@types/got": "9.6.9", "@types/got": "9.6.11",
"@types/json-schema": "7.0.6", "@types/json-schema": "7.0.7",
"@types/mustache": "4.0.0", "@types/mustache": "4.1.1",
"@types/node": "10.17.21", "@types/node": "14.14.37",
"ajv": "6.11.0", "ajv": "6.12.6",
"better-ajv-errors": "0.6.7", "better-ajv-errors": "0.7.0",
"chai": "4.2.0", "chai": "4.3.4",
"commander": "4.1.1", "commander": "4.1.1",
"deepmerge": "4.2.2", "deepmerge": "4.2.2",
"del": "5.1.0", "del": "5.1.0",
"flatted": "2.0.1", "flatted": "2.0.2",
"glob": "7.1.6", "glob": "7.1.6",
"got": "10.5.5", "got": "10.7.0",
"humanize-string": "2.1.0", "humanize-string": "2.1.0",
"json-schema": "0.2.5", "json-schema": "0.3.0",
"mustache": "4.0.0", "mustache": "4.2.0",
"plantuml-encoder": "1.4.0", "plantuml-encoder": "1.4.0",
"toposort": "2.0.2", "toposort": "2.0.2",
"ts-json-schema-generator": "0.60.0", "ts-json-schema-generator": "0.70.2",
"ts-node": "8.6.2", "ts-node": "8.10.2",
"typedoc": "0.18.0", "typedoc": "0.18.0",
"typescript": "3.8.3" "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": { "dependencies": {
"@types/json-schema": { "flatted": {
"version": "7.0.6", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
"integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA=="
},
"@types/node": {
"version": "10.17.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz",
"integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ=="
} }
} }
}, },
"@types/got": { "@sindresorhus/is": {
"version": "9.6.9", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.9.tgz", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz",
"integrity": "sha512-w+ZE+Ovp6fM+1sHwJB7RN3f3pTJHZkyABuULqbtknqezQyWadFEp5BzOXaZzRqAw2md6/d3ybxQJt+BNgpvzOg==", "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": { "requires": {
"@types/node": "*", "@types/minimatch": "*",
"@types/tough-cookie": "*", "@types/node": "*"
"form-data": "^2.5.0"
} }
}, },
"@types/node": { "@types/mustache": {
"version": "10.17.44", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.44.tgz", "resolved": "https://registry.npmjs.org/@types/mustache/-/mustache-4.1.1.tgz",
"integrity": "sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw==" "integrity": "sha512-Sm0NWeLhS2QL7NNGsXvO+Fgp7e3JLHCO6RS3RCnfjAnkw6Y1bsji/AGfISdQZDIR/AeOyzkrxRk9jBkl55zdJw=="
}, },
"chai": { "ajv": {
"version": "4.2.0", "version": "6.12.6",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"requires": { "requires": {
"assertion-error": "^1.1.0", "fast-deep-equal": "^3.1.1",
"check-error": "^1.0.2", "fast-json-stable-stringify": "^2.0.0",
"deep-eql": "^3.0.1", "json-schema-traverse": "^0.4.1",
"get-func-name": "^2.0.0", "uri-js": "^4.2.2"
"pathval": "^1.1.0",
"type-detect": "^4.0.5"
} }
}, },
"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": { "commander": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
@@ -522,12 +596,17 @@
"mimic-response": "^2.0.0" "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": { "got": {
"version": "10.5.5", "version": "10.7.0",
"resolved": "https://registry.npmjs.org/got/-/got-10.5.5.tgz", "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz",
"integrity": "sha512-B13HHkCkTA7KxyxTrFoZfrurBX1fZxjMTKpmIfoVzh0Xfs9aZV7xEfI6EKuERQOIPbomh5LE4xDkfK6o2VXksw==", "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==",
"requires": { "requires": {
"@sindresorhus/is": "^1.0.0", "@sindresorhus/is": "^2.0.0",
"@szmarczak/http-timer": "^4.0.0", "@szmarczak/http-timer": "^4.0.0",
"@types/cacheable-request": "^6.0.1", "@types/cacheable-request": "^6.0.1",
"cacheable-lookup": "^2.0.0", "cacheable-lookup": "^2.0.0",
@@ -536,25 +615,57 @@
"duplexer3": "^0.1.4", "duplexer3": "^0.1.4",
"get-stream": "^5.0.0", "get-stream": "^5.0.0",
"lowercase-keys": "^2.0.0", "lowercase-keys": "^2.0.0",
"mimic-response": "^2.0.0", "mimic-response": "^2.1.0",
"p-cancelable": "^2.0.0", "p-cancelable": "^2.0.0",
"p-event": "^4.0.0", "p-event": "^4.0.0",
"responselike": "^2.0.0", "responselike": "^2.0.0",
"to-readable-stream": "^2.0.0", "to-readable-stream": "^2.0.0",
"type-fest": "^0.9.0" "type-fest": "^0.10.0"
} }
}, },
"ts-node": { "has-flag": {
"version": "8.6.2", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.6.2.tgz", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg==", "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": { "requires": {
"arg": "^4.1.0", "@types/json-schema": "^7.0.5",
"diff": "^4.0.1", "commander": "~5.1.0",
"make-error": "^1.1.1", "glob": "~7.1.6",
"source-map-support": "^0.5.6", "json-stable-stringify": "^1.0.1",
"yn": "3.1.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", "version": "9.6.11",
"resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.11.tgz", "resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.11.tgz",
"integrity": "sha512-dr3IiDNg5TDesGyuwTrN77E1Cd7DCdmCFtEfSGqr83jMMtcwhf/SGPbN2goY4JUWQfvxwY56+e5tjfi+oXeSdA==", "integrity": "sha512-dr3IiDNg5TDesGyuwTrN77E1Cd7DCdmCFtEfSGqr83jMMtcwhf/SGPbN2goY4JUWQfvxwY56+e5tjfi+oXeSdA==",
"dev": true,
"requires": { "requires": {
"@types/node": "*", "@types/node": "*",
"@types/tough-cookie": "*", "@types/tough-cookie": "*",
@@ -1001,7 +1111,6 @@
"version": "6.4.1", "version": "6.4.1",
"resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.1.tgz", "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.1.tgz",
"integrity": "sha512-8081UY/0XTTDpuGqCnDc8IY+Q3DSg604wB3dBH0CaZlj4nZWHWuxtZ3NRZ9c9WUrz1Vfm6wioAUnqL3bsh49uQ==", "integrity": "sha512-8081UY/0XTTDpuGqCnDc8IY+Q3DSg604wB3dBH0CaZlj4nZWHWuxtZ3NRZ9c9WUrz1Vfm6wioAUnqL3bsh49uQ==",
"dev": true,
"requires": { "requires": {
"@types/node": "*" "@types/node": "*"
} }
@@ -1512,7 +1621,6 @@
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
"integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
"dev": true,
"requires": { "requires": {
"assertion-error": "^1.1.0", "assertion-error": "^1.1.0",
"check-error": "^1.0.2", "check-error": "^1.0.2",

View File

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

View File

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

View File

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