diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
index e7cec26..eb5826a 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndex.java
@@ -1337,7 +1337,7 @@ public class LucenePropertyIndex implements AdvancedQueryIndex, QueryIndex, Nati
     /**
      * Following logic is taken from org.apache.jackrabbit.core.query.lucene.JackrabbitQueryParser#parse(java.lang.String)
      */
-    private static String rewriteQueryText(String textsearch) {
+    static String rewriteQueryText(String textsearch) {
         // replace escaped ' with just '
         StringBuilder rewritten = new StringBuilder();
         // the default lucene query parser recognizes 'AND' and 'NOT' as
@@ -1346,27 +1346,28 @@ public class LucenePropertyIndex implements AdvancedQueryIndex, QueryIndex, Nati
         textsearch = textsearch.replaceAll("NOT", "not");
         boolean escaped = false;
         for (int i = 0; i < textsearch.length(); i++) {
-            if (textsearch.charAt(i) == '\\') {
+            char c = textsearch.charAt(i);
+            if (c == '\\') {
                 if (escaped) {
                     rewritten.append("\\\\");
                     escaped = false;
                 } else {
                     escaped = true;
                 }
-            } else if (textsearch.charAt(i) == '\'') {
+            } else if (c == '\'') {
                 if (escaped) {
                     escaped = false;
                 }
-                rewritten.append(textsearch.charAt(i));
-            } else if (textsearch.charAt(i) == ':') {
+                rewritten.append(c);
+            } else if (c == ':' || c == '/') {
                 // fields as known in lucene are not supported
-                rewritten.append("\\:");
+                rewritten.append('\\').append(c);
             } else {
                 if (escaped) {
                     rewritten.append('\\');
                     escaped = false;
                 }
-                rewritten.append(textsearch.charAt(i));
+                rewritten.append(c);
             }
         }
         return rewritten.toString();
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
index bd1c527..cabd5c7 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LucenePropertyIndexTest.java
@@ -1842,6 +1842,26 @@ public class LucenePropertyIndexTest extends AbstractQueryTest {
         assertQuery(propabQuery, asList("/test/a"));
     }
 
+    @Test
+    public void fulltextQueryWithSpecialChars() throws Exception{
+        Tree idx = createIndex("test1", of("propa", "propb"));
+        Tree props = TestUtil.newRulePropTree(idx, "nt:base");
+        Tree prop1 = props.addChild(TestUtil.unique("prop"));
+        prop1.setProperty(LuceneIndexConstants.PROP_NAME, "tag");
+        prop1.setProperty(LuceneIndexConstants.PROP_ANALYZED, true);
+        root.commit();
+
+        Tree test = root.getTree("/").addChild("test");
+        test.setProperty("tag", "stockphotography:business/business_abstract");
+        root.commit();
+
+        String propabQuery = "select * from [nt:base] where CONTAINS(tag, " +
+                "'stockphotography:business/business_abstract')";
+        assertThat(explain(propabQuery), containsString("lucene:test1(/oak:index/test1)"));
+        assertQuery(propabQuery, asList("/test"));
+
+    }
+
     private static Tree createNodeWithMixinType(Tree t, String nodeName, String typeName){
         t = t.addChild(nodeName);
         t.setProperty(JcrConstants.JCR_MIXINTYPES, Collections.singleton(typeName), Type.NAMES);
