diff --git a/integrations/repo_search_test.go b/integrations/repo_search_test.go
index 6f2ee37460..56d89fee30 100644
--- a/integrations/repo_search_test.go
+++ b/integrations/repo_search_test.go
@@ -44,7 +44,6 @@ func TestSearchRepo(t *testing.T) {
 	repo, err = models.GetRepositoryByOwnerAndName("user2", "glob")
 	assert.NoError(t, err)
 
-	executeIndexer(t, repo, code_indexer.DeleteRepoFromIndexer)
 	executeIndexer(t, repo, code_indexer.UpdateRepoIndexer)
 
 	testSearch(t, "/user2/glob/search?q=loren&page=1", []string{"a.txt"})
diff --git a/modules/indexer/code/indexer.go b/modules/indexer/code/indexer.go
index 46b5905059..981167a825 100644
--- a/modules/indexer/code/indexer.go
+++ b/modules/indexer/code/indexer.go
@@ -75,16 +75,18 @@ func filenameOfIndexerID(indexerID string) string {
 
 // IndexerData represents data stored in the code indexer
 type IndexerData struct {
-	RepoID   int64
-	IsDelete bool
+	RepoID int64
 }
 
 var (
-	indexerQueue queue.Queue
+	indexerQueue queue.UniqueQueue
 )
 
 func index(indexer Indexer, repoID int64) error {
 	repo, err := models.GetRepositoryByID(repoID)
+	if models.IsErrRepoNotExist(err) {
+		return indexer.Delete(repoID)
+	}
 	if err != nil {
 		return err
 	}
@@ -146,22 +148,16 @@ func Init() {
 					log.Error("Unable to process provided datum: %v - not possible to cast to IndexerData", datum)
 					continue
 				}
-				log.Trace("IndexerData Process: %v %t", indexerData.RepoID, indexerData.IsDelete)
-
-				if indexerData.IsDelete {
-					if err := indexer.Delete(indexerData.RepoID); err != nil {
-						log.Error("indexer.Delete: %v", err)
-					}
-				} else {
-					if err := index(indexer, indexerData.RepoID); err != nil {
-						log.Error("index: %v", err)
-						continue
-					}
+				log.Trace("IndexerData Process Repo: %d", indexerData.RepoID)
+
+				if err := index(indexer, indexerData.RepoID); err != nil {
+					log.Error("index: %v", err)
+					continue
 				}
 			}
 		}
 
-		indexerQueue = queue.CreateQueue("code_indexer", handler, &IndexerData{})
+		indexerQueue = queue.CreateUniqueQueue("code_indexer", handler, &IndexerData{})
 		if indexerQueue == nil {
 			log.Fatal("Unable to create codes indexer queue")
 		}
@@ -265,14 +261,6 @@ func Init() {
 	}
 }
 
-// DeleteRepoFromIndexer remove all of a repository's entries from the indexer
-func DeleteRepoFromIndexer(repo *models.Repository) {
-	indexData := &IndexerData{RepoID: repo.ID, IsDelete: true}
-	if err := indexerQueue.Push(indexData); err != nil {
-		log.Error("Delete repo index data %v failed: %v", indexData, err)
-	}
-}
-
 // UpdateRepoIndexer update a repository's entries in the indexer
 func UpdateRepoIndexer(repo *models.Repository) {
 	indexData := &IndexerData{RepoID: repo.ID}
diff --git a/modules/notification/indexer/indexer.go b/modules/notification/indexer/indexer.go
index 205194ad3e..109eb1f62d 100644
--- a/modules/notification/indexer/indexer.go
+++ b/modules/notification/indexer/indexer.go
@@ -109,7 +109,7 @@ func (r *indexerNotifier) NotifyDeleteComment(doer *models.User, comment *models
 func (r *indexerNotifier) NotifyDeleteRepository(doer *models.User, repo *models.Repository) {
 	issue_indexer.DeleteRepoIssueIndexer(repo)
 	if setting.Indexer.RepoIndexerEnabled {
-		code_indexer.DeleteRepoFromIndexer(repo)
+		code_indexer.UpdateRepoIndexer(repo)
 	}
 }