Exemple #1
0
        public void DeleteIndex(params Term[] terms)
        {
            using var readLock = new EnterReaderWriterLock(readerWriteLock);
            IndexWriter.DeleteDocuments(terms);

            indexChangeCount++;
        }
Exemple #2
0
        public void DeleteIndex(params Query[] searchQueries)
        {
            using var readLock = new EnterReaderWriterLock(readerWriteLock);
            IndexWriter.DeleteDocuments(searchQueries);

            indexChangeCount++;
        }
Exemple #3
0
        public void DeleteIndex(Query query, out Document[] documentsBeenDeleted)
        {
            using var readLock   = new EnterReaderWriterLock(readerWriteLock);
            using var searcher   = GetUseIndexSearcher();
            documentsBeenDeleted = searcher.IndexSearcher.Search(query, int.MaxValue).ScoreDocs.Select(hit => searcher.IndexSearcher.Doc(hit.Doc)).ToArray();
            IndexWriter.DeleteDocuments(query);

            indexChangeCount++;
        }
Exemple #4
0
        public void Dispose()
        {
            using var readLock = new EnterReaderWriterLock(readerWriteLock, false);

            if (!isDisposing)
            {
                isDisposing      = true;
                indexChangeCount = 0;
                indexReader?.Dispose();
                indexWriter?.Dispose();
            }
        }
Exemple #5
0
        public Document[] SearchWithSpecificFields(Query query, int maxResults, params string[] fieldsNeedToLoad)
        {
            fieldsNeedToLoad.RequireContainsElement(nameof(fieldsNeedToLoad));

            using var readLock = new EnterReaderWriterLock(readerWriteLock);
            using var searcher = GetUseIndexSearcher();

            return(searcher.IndexSearcher.Search(query, maxResults).ScoreDocs.Select(hit =>
            {
                var visitor = new DocumentStoredFieldVisitor(fieldsNeedToLoad);
                searcher.IndexSearcher.Doc(hit.Doc, visitor);
                return visitor.Document;
            }).ToArray());
        }
Exemple #6
0
        public Document[] Search(Query query, int maxResults, Filter filter = null)
        {
            using var readLock = new EnterReaderWriterLock(readerWriteLock);
            using var searcher = GetUseIndexSearcher();
            Document[] documents;

            if (filter != null)
            {
                documents = searcher.IndexSearcher.Search(query, filter, maxResults).ScoreDocs.Select(hit => searcher.IndexSearcher.Doc(hit.Doc)).ToArray();
            }
            else
            {
                documents = searcher.IndexSearcher.Search(query, maxResults).ScoreDocs.Select(hit => searcher.IndexSearcher.Doc(hit.Doc)).ToArray();
            }

            return(documents);
        }
Exemple #7
0
        public void BuildIndex(IEnumerable <Document> documents, bool needCommit, bool triggerMerge = false, bool applyAllDeletes = false)
        {
            using var readLock = new EnterReaderWriterLock(readerWriteLock);
            IndexWriter.AddDocuments(documents);

            if (triggerMerge || applyAllDeletes)
            {
                IndexWriter.Flush(triggerMerge, applyAllDeletes);
            }

            if (needCommit)
            {
                IndexWriter.Commit();
            }

            indexChangeCount++;
        }