public void ClearAllObjects() { Initialize(); Updating.SafeInvoke(this); lock (_lockObject) { using (var analyzer = new StandardAnalyzer(LuceneDefaults.Version)) { using (var writer = new IndexWriter(_indexDirectory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED)) { _indexedObjects.Clear(); _searchableMetadata.Clear(); writer.DeleteAll(); writer.Optimize(); writer.Commit(); } } } Updated.SafeInvoke(this); }
public virtual void AddObjects(IEnumerable <ISearchable> searchables) { Initialize(); Updating.SafeInvoke(this); lock (_lockObject) { using (var analyzer = new StandardAnalyzer(LuceneDefaults.Version)) { using (var writer = new IndexWriter(_indexDirectory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED)) { foreach (var searchable in searchables) { var index = _currentIndex++; _indexedObjects.Add(index, searchable); _searchableIndexes.Add(searchable, index); var document = new Document(); document.Add(new Field(IndexId, index.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED)); var metadata = searchable.MetadataCollection; var searchableMetadatas = metadata.All.OfType <ISearchableMetadata>(); foreach (var searchableMetadata in searchableMetadatas) { var searchableMetadataValue = searchableMetadata.GetValue(searchable.Instance); var searchableMetadataValueAsString = ObjectToStringHelper.ToString(searchableMetadataValue); var field = new Field(searchableMetadata.SearchName, searchableMetadataValueAsString, Field.Store.YES, searchableMetadata.Analyze ? Field.Index.ANALYZED : Field.Index.NOT_ANALYZED, Field.TermVector.NO); document.Add(field); if (!_searchableMetadata.ContainsKey(searchableMetadata.SearchName)) { _searchableMetadata.Add(searchableMetadata.SearchName, searchableMetadata); } } writer.AddDocument(document); } writer.Optimize(); writer.Commit(); } } } Updated.SafeInvoke(this); }
public virtual void RemoveObjects(IEnumerable <ISearchable> searchables) { Initialize(); lock (_lockObject) { Updating.SafeInvoke(this); using (var analyzer = new StandardAnalyzer(LuceneDefaults.Version)) { using (var writer = new IndexWriter(_indexDirectory, analyzer, IndexWriter.MaxFieldLength.UNLIMITED)) { foreach (var searchable in searchables) { int index; if (!_searchableIndexes.TryGetValue(searchable, out index)) { continue; } var queryAsText = $"{IndexId}:{index}"; var parser = new QueryParser(LuceneDefaults.Version, string.Empty, analyzer); var query = parser.Parse(queryAsText); writer.DeleteDocuments(query); _searchableIndexes.Remove(searchable); _indexedObjects.Remove(index); } writer.Optimize(); writer.Commit(); } } Updated.SafeInvoke(this); } }