public virtual Task <IndexingResult> RemoveAsync(string documentType, IList <IndexDocument> documents) { var result = new IndexingResult { Items = new List <IndexingResultItem>(documents.Count) }; var indexName = GetIndexName(documentType); var directoryPath = GetDirectoryPath(indexName); CloseWriter(indexName, false); Analyzer analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48); IndexWriterConfig config = new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer); using (var directory = FSDirectory.Open(directoryPath)) using (var reader = new IndexWriter(directory, config)) { foreach (var document in documents) { var resultItem = new IndexingResultItem { Id = document.Id }; result.Items.Add(resultItem); try { if (!string.IsNullOrEmpty(document.Id)) { var term = new Term(LuceneSearchHelper.KeyFieldName, document.Id); reader.DeleteDocuments(term); resultItem.Succeeded = true; } else { resultItem.ErrorMessage = "Document ID is empty"; } } catch (Exception ex) { resultItem.ErrorMessage = ex.ToString(); } } } return(Task.FromResult(result)); }
public virtual Task <IndexingResult> IndexAsync(string documentType, IList <IndexDocument> documents) { var result = new IndexingResult { Items = new List <IndexingResultItem>(documents.Count) }; var indexName = GetIndexName(documentType); lock (_providerlock) { var writer = GetIndexWriter(indexName, true, false); foreach (var document in documents) { var resultItem = new IndexingResultItem { Id = document.Id }; result.Items.Add(resultItem); try { var providerDocument = ConvertToProviderDocument(document, documentType); if (!string.IsNullOrEmpty(document.Id)) { var term = new Term(LuceneSearchHelper.KeyFieldName, document.Id); writer.UpdateDocument(term, providerDocument); resultItem.Succeeded = true; } else { resultItem.ErrorMessage = "Document ID is empty"; } } catch (Exception ex) { resultItem.ErrorMessage = ex.ToString(); } } } CloseWriter(indexName, true); return(Task.FromResult(result)); }