diff --git a/server/controllers/lighthouse.js b/server/controllers/lighthouse.js
index c3f6d16..d015cf3 100644
--- a/server/controllers/lighthouse.js
+++ b/server/controllers/lighthouse.js
@@ -42,7 +42,7 @@ function getResults (input) {
         'must': {
           'query_string': {
             'fields': ['channel'],
-            'query' : input.channel,
+            'query' : getEscapedQuery(input.channel),
           },
         },
       },
@@ -74,7 +74,7 @@ function getResults (input) {
   };
   const conTermName = { // Contains search term - Name
     'query_string': {
-      'query' : '*' + input.s.trim() + '*',
+      'query' : '*' + getEscapedQuery(input.s) + '*',
       'fields': [
         'name',
       ],
@@ -89,7 +89,7 @@ function getResults (input) {
           'should': [
             { // Contains search term in Author, Title, Description
               'query_string': {
-                'query' : '*' + input.s.trim() + '*',
+                'query' : '*' + getEscapedQuery(input.s) + '*',
                 'fields': [
                   'value.stream.metadata.author',
                   'value.stream.metadata.title',
@@ -252,6 +252,28 @@ function getStatus () {
   });
 }
 
+function getEscapedQuery (query) {
+  let badCharacters  = ['+', '-', '&&', '||', '!', '(', ')', '{', '}', '[', ']', '^', '"', '~', '*', '?', ':', '\\'];
+  let escapedQuery = '';
+  for (var i = 0; i < query.length; i++) {
+    let char1 = query.charAt(i);
+    if (badCharacters.includes(char1)) {
+      escapedQuery = escapedQuery + '\\' + char1;
+    } else if (i + 1 <= query.length) {
+      let char2 = query.charAt(i + 1);
+      if (badCharacters.includes(char1 + char2)) {
+        escapedQuery = escapedQuery + '\\' + char1 + char2;
+        i++;
+      } else {
+        escapedQuery = escapedQuery + char1;
+      }
+    } else {
+      escapedQuery = escapedQuery + char1;
+    }
+  }
+  return escapedQuery;
+}
+
 class LighthouseControllers {
   /* eslint-disable no-param-reassign */
   // Start syncing blocks...