From bdebb35f62305b364a454b0d89cf98bbda8ab218 Mon Sep 17 00:00:00 2001 From: zadam Date: Wed, 23 Sep 2020 22:18:26 +0200 Subject: [PATCH] better error reporting on failed search --- src/public/app/services/entrypoints.js | 2 +- src/routes/api/search.js | 3 ++- src/services/search/search_context.js | 8 ++++++++ src/services/search/services/parse.js | 8 +++++++- src/services/search/services/search.js | 2 ++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/public/app/services/entrypoints.js b/src/public/app/services/entrypoints.js index bc1a2f9d4..c399cd5c1 100644 --- a/src/public/app/services/entrypoints.js +++ b/src/public/app/services/entrypoints.js @@ -165,7 +165,7 @@ export default class Entrypoints extends Component { const response = await server.get('search/' + encodeURIComponent(searchText) + '?includeNoteContent=true&excludeArchived=true&fuzzyAttributeSearch=false'); if (!response.success) { - toastService.showError("Search failed.", 3000); + toastService.showError("Search failed: " + response.message, 10000); return; } diff --git a/src/routes/api/search.js b/src/routes/api/search.js index 4e8a428a1..ef81122f6 100644 --- a/src/routes/api/search.js +++ b/src/routes/api/search.js @@ -17,7 +17,8 @@ function searchNotes(req) { try { return { - success: true, + success: !searchContext.hasError(), + message: searchContext.getError(), count, results } diff --git a/src/services/search/search_context.js b/src/services/search/search_context.js index 4b6a83d4a..127cd4dd6 100644 --- a/src/services/search/search_context.js +++ b/src/services/search/search_context.js @@ -16,6 +16,14 @@ class SearchContext { this.error = error; } } + + hasError() { + return !!this.error; + } + + getError() { + return this.error; + } } module.exports = SearchContext; diff --git a/src/services/search/services/parse.js b/src/services/search/services/parse.js index 06ecc8bd4..e9098b730 100644 --- a/src/services/search/services/parse.js +++ b/src/services/search/services/parse.js @@ -263,7 +263,13 @@ function getExpression(tokens, searchContext, level = 0) { i += 1; return new RelationWhereExp(relationName, parseNoteProperty()); - } else { + } + else if (i < tokens.length - 2 && isOperator(tokens[i + 1].token)) { + searchContext.addError(`Relation can be compared only with property, e.g. ~relation.title=hello in ${context(i)}`); + + return null; + } + else { return new AttributeExistsExp('relation', relationName, searchContext.fuzzyAttributeSearch); } } diff --git a/src/services/search/services/search.js b/src/services/search/services/search.js index dae4c3a60..66a3ca911 100644 --- a/src/services/search/services/search.js +++ b/src/services/search/services/search.js @@ -73,6 +73,8 @@ function findNotesWithQuery(query, searchContext) { return []; } + searchContext.originalQuery = query; + return utils.stopWatch(`Search with query "${query}"`, () => { const expression = parseQueryToExpression(query, searchContext);