diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
index aad096d..0db95cd 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlanner.java
@@ -246,6 +246,11 @@ class IndexPlanner {
             }
         }
 
+        //Suggestion and SpellCheck use virtual paths which is same for all results
+        if (canHandleNativeFunction) {
+            result.disableUniquePaths();
+        }
+
         //If native function can be handled by this index then ensure
         // that lowest cost if returned
         return canHandleNativeFunction ? defaultPlan().setEstimatedEntryCount(1) : null;
@@ -530,6 +535,7 @@ class IndexPlanner {
         private boolean relativize;
         private boolean nodeTypeRestrictions;
         private boolean nodeNameRestriction;
+        private boolean uniquePathsRequired = true;
 
         public PlanResult(String indexPath, IndexDefinition defn, IndexingRule indexingRule) {
             this.indexPath = indexPath;
@@ -549,6 +555,10 @@ class IndexPlanner {
             return relativize;
         }
 
+        public boolean isUniquePathsRequired() {
+            return uniquePathsRequired;
+        }
+
         /**
          * Transforms the given path if the query involved relative properties and index
          * is not making use of aggregated properties. If the path
@@ -604,5 +614,9 @@ class IndexPlanner {
         private void enableNodeNameRestriction(){
             nodeNameRestriction = true;
         }
+
+        private void disableUniquePaths(){
+            uniquePathsRequired = false;
+        }
     }
 }
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 7d514aa..5bea22e 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
@@ -1499,7 +1499,7 @@ public class LucenePropertyIndex implements AdvancedQueryIndex, QueryIndex, Nati
                 }
 
             };
-            pathCursor = new PathCursor(pathIterator, false, settings);
+            pathCursor = new PathCursor(pathIterator, getPlanResult(plan).isUniquePathsRequired(), settings);
         }
 
 
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
index d703736..5f9ea38 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java
@@ -70,6 +70,7 @@ import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_N
 import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT;
 import static org.apache.jackrabbit.oak.spi.query.QueryIndex.OrderEntry;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
@@ -87,6 +88,7 @@ public class IndexPlannerTest {
         IndexPlanner planner = new IndexPlanner(node, "/foo", createFilter("nt:base"),
                 ImmutableList.of(new OrderEntry("foo", Type.LONG, OrderEntry.Order.ASCENDING)));
         assertNotNull(planner.getPlan());
+        assertTrue(pr(planner.getPlan()).isUniquePathsRequired());
     }
 
     @Test
@@ -312,6 +314,7 @@ public class IndexPlannerTest {
         assertEquals(1.0, plan.getCostPerEntry(), 0);
     }
 
+
     @Test
     public void propertyIndexCost2() throws Exception{
         NodeBuilder defn = newLucenePropertyIndexDefinition(builder, "test", of("foo"), "async");
@@ -504,6 +507,7 @@ public class IndexPlannerTest {
         QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, queryNodeType, queryForSugggestion);
 
         assertNotNull(plan);
+        assertFalse(pr(plan).isUniquePathsRequired());
     }
 
     @Test
@@ -519,6 +523,7 @@ public class IndexPlannerTest {
         QueryIndex.IndexPlan plan = getSuggestOrSpellcheckIndexPlan(node, queryNodeType, queryForSugggestion);
 
         assertNotNull(plan);
+        assertFalse(pr(plan).isUniquePathsRequired());
     }
 
     @Test
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java
index 2156055..3d9d42d 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java
@@ -74,7 +74,9 @@ import static org.apache.jackrabbit.oak.spi.query.QueryIndex.IndexPlan;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterators;
+import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.oak.api.Blob;
@@ -354,7 +356,14 @@ public class LuceneIndexTest {
         // would have already picked up 50 docs which would not be considered
         //deleted by QE for the revision at which query was triggered
         //So just checking for >
-        Assert.assertTrue(Iterators.size(cursor) > 0);
+        List<String> resultPaths = Lists.newArrayList();
+        while(cursor.hasNext()){
+            resultPaths.add(cursor.next().getPath());
+        }
+
+        Set<String> uniquePaths = Sets.newHashSet(resultPaths);
+        assertEquals(resultPaths.size(), uniquePaths.size());
+        assertTrue(!uniquePaths.isEmpty());
     }
 
     private void purgeDeletedDocs(NodeBuilder idx, IndexDefinition definition) throws IOException {
