2015-02-04 4 views
4

Есть ли простой способ удалить все документы (или отфильтрованный список или документы) из индекса поиска Azure?Как удалить все документы в индекс

Я знаю, что явный ответ - удалить и воссоздать индекс, но мне интересно, есть ли другой вариант.

ответ

3

Нет, в настоящее время нет способа удалить все документы из индекса. Как вы подозревали, что удаление и повторное создание индекса - это путь. Для действительно небольших индексов вы можете рассмотреть возможность удаления документов по отдельности, но при условии, что в приложениях уже есть код для создания индекса, delete/rereate - самый быстрый путь.

+0

Было бы здорово, если бы вы могли бы добавить это в качестве пункта нашей странице UserVoice (http://feedback.azure.com/forums/263029-azure-search), как мы уже слышали этот вопрос несколько раз и было бы очень полезно отслеживать важность этого для вас самих и других, учитывая обход Пабло. Один из вариантов, который мы могли бы рассмотреть, - также разрешить удаление фильтра $ filter, чтобы вы могли не только удалить все документы, но и конкретные документы. –

0

Существует способ: запросить все документы и использовать IndexBatch для удаления этих парней.

public void DeleteAllDocuments() 
    { 
     // Get index 
     SearchIndexClient indexClient = new SearchIndexClient(SearchServiceName, SearchServiceIndex, new SearchCredentials(SearchServiceQueryApiKey)); 

     // Query all 
     DocumentSearchResult<Document> searchResult; 
     try 
     { 
      searchResult = indexClient.Documents.Search<Document>(string.Empty); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception("Error during AzureSearch"); 
     } 

     List<string> azureDocsToDelete = 
      searchResult 
       .Results 
       .Select(r => r.Document["id"].ToString()) 
       .ToList(); 

     // Delete all 
     try 
     { 
      IndexBatch batch = IndexBatch.Delete("id", azureDocsToDelete); 
      var result = indexClient.Documents.Index(batch); 
     } 
     catch (IndexBatchException ex) 
     { 
      throw new Exception($"Failed to delete documents: {string.Join(", ", ex.IndexingResults.Where(r => !r.Succeeded).Select(r => r.Key))}"); 
     } 
    }