Example #1
0
        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));
        }
Example #2
0
        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));
        }