diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java
index 0deceb4..5a834dd 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectory.java
@@ -94,6 +94,7 @@ public class OakDirectory extends Directory {
     private final String indexName;
     @Nullable
     private final GarbageCollectableBlobStore blobStore;
+    private boolean dirty;
 
     public OakDirectory(NodeBuilder builder, IndexDefinition definition, boolean readOnly) {
         this(builder, INDEX_DATA_CHILD_NAME, definition, readOnly, null);
@@ -154,6 +155,7 @@ public class OakDirectory extends Directory {
             trashEntry.setProperty(JCR_DATA, data, BINARIES);
         }
         f.remove();
+        markDirty();
     }
 
     @Override
@@ -183,6 +185,7 @@ public class OakDirectory extends Directory {
             file = directoryBuilder.child(name);
         }
         fileNames.add(name);
+        markDirty();
         return new OakIndexOutput(name, file, indexName, blobStore);
     }
 
@@ -238,6 +241,14 @@ public class OakDirectory extends Directory {
         return "Directory for " + definition.getIndexName();
     }
 
+    public boolean isDirty() {
+        return dirty;
+    }
+
+    private void markDirty() {
+        dirty = true;
+    }
+
     private Set<String> getListing(){
         long start = PERF_LOGGER.start();
         Iterable<String> fileNames = null;
diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriter.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriter.java
index 1a17356..2e3e019 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriter.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/writer/DefaultIndexWriter.java
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.plugins.index.lucene.writer;
 
 import java.io.IOException;
 import java.util.Calendar;
+import java.util.List;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -37,6 +38,7 @@ import org.apache.jackrabbit.oak.util.PerfLogger;
 import org.apache.jackrabbit.util.ISO8601;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.index.DirectoryReader;
+import org.apache.lucene.index.IndexCommit;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.IndexableField;
@@ -64,6 +66,7 @@ class DefaultIndexWriter implements LuceneIndexWriter {
     private IndexWriter writer;
     private Directory directory;
     private GarbageCollectableBlobStore blobStore;
+    private long genAtStart = -1;
 
     public DefaultIndexWriter(IndexDefinition definition, NodeBuilder definitionBuilder,
         @Nullable IndexCopier indexCopier, String dirName, String suggestDirName,
@@ -118,7 +121,6 @@ class DefaultIndexWriter implements LuceneIndexWriter {
         }
 
         if (writer != null) {
-            indexUpdated = true;
             if (log.isTraceEnabled()) {
                 trackIndexSizeInfo(writer, definition, directory);
             }
@@ -126,13 +128,18 @@ class DefaultIndexWriter implements LuceneIndexWriter {
             final long start = PERF_LOGGER.start();
 
             if (updateSuggestions) {
-                updateSuggester(writer.getAnalyzer(), currentTime, blobStore);
+                indexUpdated = updateSuggester(writer.getAnalyzer(), currentTime, blobStore);
                 PERF_LOGGER.end(start, -1, "Completed suggester for directory {}", definition);
             }
 
             writer.close();
             PERF_LOGGER.end(start, -1, "Closed writer for directory {}", definition);
 
+            if (!indexUpdated){
+                long genAtEnd = getLatestGeneration(directory);
+                indexUpdated = genAtEnd != genAtStart;
+            }
+
             directory.close();
             PERF_LOGGER.end(start, -1, "Closed directory for directory {}", definition);
         }
@@ -153,6 +160,7 @@ class DefaultIndexWriter implements LuceneIndexWriter {
                 config = getIndexWriterConfig(definition, true);
             }
             writer = new IndexWriter(directory, config);
+            genAtStart = getLatestGeneration(directory);
             PERF_LOGGER.end(start, -1, "Created IndexWriter for directory {}", definition);
         }
         return writer;
@@ -164,21 +172,24 @@ class DefaultIndexWriter implements LuceneIndexWriter {
      * @param analyzer the analyzer used to update the suggester
      * @param blobStore
      */
-    private void updateSuggester(Analyzer analyzer, Calendar currentTime,
+    private boolean updateSuggester(Analyzer analyzer, Calendar currentTime,
         @Nullable GarbageCollectableBlobStore blobStore) throws IOException {
         NodeBuilder suggesterStatus = definitionBuilder.child(suggestDirName);
         DirectoryReader reader = DirectoryReader.open(writer, false);
         final OakDirectory suggestDirectory =
             new OakDirectory(definitionBuilder, suggestDirName, definition, false, blobStore);
+        boolean indexUpdated = false;
         try {
             SuggestHelper.updateSuggester(suggestDirectory, analyzer, reader);
             suggesterStatus.setProperty("lastUpdated", ISO8601.format(currentTime), Type.DATE);
         } catch (Throwable e) {
             log.warn("could not update suggester", e);
         } finally {
+            indexUpdated = suggestDirectory.isDirty();
             suggestDirectory.close();
             reader.close();
         }
+        return indexUpdated;
     }
 
     /**
@@ -226,6 +237,17 @@ class DefaultIndexWriter implements LuceneIndexWriter {
         }
     }
 
+    private static long getLatestGeneration(Directory directory) throws IOException {
+        if (DirectoryReader.indexExists(directory)) {
+            List<IndexCommit> commits = DirectoryReader.listCommits(directory);
+            if (!commits.isEmpty()) {
+                //Look for that last commit as list is sorted from oldest to latest
+                return commits.get(commits.size() - 1).getGeneration();
+            }
+        }
+        return -1;
+    }
+
     private static void trackIndexSizeInfo(@Nonnull IndexWriter writer,
                                            @Nonnull IndexDefinition definition,
                                            @Nonnull Directory directory) throws IOException {
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java
index eb5a367..4a0d173 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java
@@ -73,6 +73,7 @@ import org.apache.jackrabbit.oak.spi.mount.Mount;
 import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
 import org.apache.jackrabbit.test.ISO8601;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexReader;
@@ -150,6 +151,35 @@ public class LuceneIndexEditorTest {
                 getPath(NumericRangeQuery.newLongRange("price", 100L, 100L, true, true)));
     }
 
+    @Test
+    public void noChangeIfNonIndexedDelete() throws Exception{
+        NodeState before = builder.getNodeState();
+        NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME);
+        NodeBuilder nb = newLuceneIndexDefinitionV2(index, "lucene", of(TYPENAME_STRING));
+        nb.setProperty(LuceneIndexConstants.FULL_TEXT_ENABLED, false);
+        nb.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo"), STRINGS));
+
+
+        builder.child("test").setProperty("foo", "bar");
+        builder.child("test").child("a");
+        NodeState after = builder.getNodeState();
+
+        NodeState indexed = HOOK.processCommit(before, after, CommitInfo.EMPTY);
+        tracker.update(indexed);
+        assertEquals("/test", getPath(new TermQuery(new Term("foo", "bar"))));
+
+        NodeState luceneIdxState1 = NodeStateUtils.getNode(indexed, "/oak:index/lucene");
+
+        before = indexed;
+        builder = indexed.builder();
+        builder.getChildNode("test").getChildNode("a").remove();
+        after = builder.getNodeState();
+        indexed = HOOK.processCommit(before, after, CommitInfo.EMPTY);
+
+        NodeState luceneIdxState2 = NodeStateUtils.getNode(indexed, "/oak:index/lucene");
+        assertEquals(luceneIdxState1, luceneIdxState2);
+    }
+
     private String escape(String name) {
         return name.replace(":", "\\:");
     }
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
index 47c61e2..24fc08f 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/OakDirectoryTest.java
@@ -30,6 +30,7 @@ import static org.apache.jackrabbit.oak.plugins.index.lucene.OakDirectory.PROP_B
 import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -201,7 +202,7 @@ public class OakDirectoryTest {
         return size;
     }
 
-    private Directory createDir(NodeBuilder builder, boolean readOnly){
+    private OakDirectory createDir(NodeBuilder builder, boolean readOnly){
         return new OakDirectory(builder,
                 new IndexDefinition(root, builder.getNodeState()), readOnly);
     }
@@ -440,6 +441,23 @@ public class OakDirectoryTest {
         assertEquals(0, dir.listAll().length);
     }
 
+    @Test
+    public void testDirty() throws Exception{
+        OakDirectory dir = createDir(builder, false);
+        assertFalse(dir.isDirty());
+        createFile(dir, "a");
+        assertTrue(dir.isDirty());
+        dir.close();
+
+        dir = createDir(builder, false);
+        assertFalse(dir.isDirty());
+        dir.openInput("a", IOContext.DEFAULT);
+        assertFalse(dir.isDirty());
+        dir.deleteFile("a");
+        assertTrue(dir.isDirty());
+        dir.close();
+    }
+
     private static void readInputToEnd(long expectedSize, IndexInput input) throws IOException {
         int COPY_BUFFER_SIZE = 16384;
         byte[] copyBuffer = new byte[(int) ONE_MB];
