From 05568295b5fb3086be03d01968b446f32490c272 Mon Sep 17 00:00:00 2001 From: Peter Clement Date: Wed, 25 Aug 2021 14:05:00 +0100 Subject: [PATCH] Add not contains option to lucene query builder --- .../DataTable/modals/CreateEditColumn.svelte | 1 - packages/builder/src/helpers/lucene.js | 7 +++++-- .../src/api/controllers/row/internalSearch.js | 21 ++++++++++++++++++- packages/standard-components/src/lucene.js | 3 ++- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte index 3f3d28bf81..92edca2a08 100644 --- a/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte +++ b/packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte @@ -86,7 +86,6 @@ let arr = field.constraints.inclusion let newArr = [] newArr.push(arr) - console.log(newArr) field.constraints.inclusion = newArr } tables.saveField({ diff --git a/packages/builder/src/helpers/lucene.js b/packages/builder/src/helpers/lucene.js index c9890d8d70..5488919c6d 100644 --- a/packages/builder/src/helpers/lucene.js +++ b/packages/builder/src/helpers/lucene.js @@ -35,7 +35,10 @@ export const OperatorOptions = { value: "contains", label: "Contains", }, - + NotContains: { + value: "notContains", + label: "Does Not Contain", + } } export const getValidOperatorsForType = type => { @@ -61,7 +64,7 @@ export const getValidOperatorsForType = type => { } else if (type === "options") { return [Op.Equals, Op.NotEquals, Op.Empty, Op.NotEmpty] } else if (type === "array") { - return [Op.Equals, Op.NotEquals, Op.Empty, Op.NotEmpty, Op.Contains] + return [Op.Contains, Op.NotContains] } else if (type === "boolean") { return [Op.Equals, Op.NotEquals, Op.Empty, Op.NotEmpty] } else if (type === "longform") { diff --git a/packages/server/src/api/controllers/row/internalSearch.js b/packages/server/src/api/controllers/row/internalSearch.js index e2e7beee27..e4552ccaba 100644 --- a/packages/server/src/api/controllers/row/internalSearch.js +++ b/packages/server/src/api/controllers/row/internalSearch.js @@ -18,6 +18,7 @@ class QueryBuilder { empty: {}, notEmpty: {}, contains: {}, + notContains: {}, ...base, } this.limit = 50 @@ -110,6 +111,10 @@ class QueryBuilder { return this } + addNotContains(key, value) { + this.query.notContains[key] = value + return this + } /** * Preprocesses a value before going into a lucene search. @@ -232,6 +237,20 @@ class QueryBuilder { } + if (this.query.notContains) { + build(this.query.notContains, (key, value) => { + if (!value) { + return null + } + let opts = [] + value.forEach(val => opts.push(`!${key}.${val}:${builder.preprocess(val, allPreProcessingOpts)}`)) + const joined = opts.join(' AND ') + return joined + }) + + } + + return query } @@ -273,7 +292,7 @@ const runQuery = async (url, body) => { method: "POST", }) const json = await response.json() - console.log(json) + let output = { rows: [], } diff --git a/packages/standard-components/src/lucene.js b/packages/standard-components/src/lucene.js index f132086aa2..36f6026a06 100644 --- a/packages/standard-components/src/lucene.js +++ b/packages/standard-components/src/lucene.js @@ -11,7 +11,8 @@ export const buildLuceneQuery = filter => { notEqual: {}, empty: {}, notEmpty: {}, - contains: {} + contains: {}, + notContains: {}, } if (Array.isArray(filter)) { filter.forEach(expression => {