From 4a19217775b93d26ae6c6ac22d98f07e981483fd Mon Sep 17 00:00:00 2001 From: Mingfei Shao Date: Tue, 23 Jul 2019 14:52:46 -0500 Subject: [PATCH] feat/support `is not` op for filter --- src/server/es/filter.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/server/es/filter.js b/src/server/es/filter.js index fa5fdb09..303b3455 100644 --- a/src/server/es/filter.js +++ b/src/server/es/filter.js @@ -16,7 +16,6 @@ const getNumericTextType = ( return numericTextType; }; -// FIXME: support "is not" const getFilterItemForString = (op, field, value) => { switch (op) { case '=': @@ -34,6 +33,18 @@ const getFilterItemForString = (op, field, value) => { [field]: value, }, }; + case '!=': + return { + bool: { + must_not: [ + { + term: { + [field]: value, + }, + }, + ], + }, + }; default: throw new UserInputError(`Invalid operation "${op}" in filter argument.`); } @@ -75,6 +86,24 @@ const getFilterItemForNumbers = (op, field, value) => { }, }; } + if (op === '!=') { + return { + bool: { + should: [ + { + range: { + [field]: { gt: value }, + }, + }, + { + range: { + [field]: { lt: value }, + }, + }, + ], + }, + }; + } throw new UserInputError(`Invalid numeric operation "${op}" for field "${field}" in filter argument`); };