Search operations using Lucene indexes may occasionally fail with the following error on highly loaded Sitecore solutions:
There was a problem while running getting number of hits records. Details: Non-negative number required.
Parameter name: capacity
at System.Collections.Hashtable..ctor(Int32 capacity, Single loadFactor)
at System.Collections.Hashtable.Clone()
at SupportClass.WeakHashTable.Clean()
at SupportClass.WeakHashTable.CleanIfNeeded()
at SupportClass.WeakHashTable.set_Item(Object key, Object value)
at Lucene.Net.Search.FieldCacheImpl.Cache.Get(IndexReader reader, Entry key)
at Lucene.Net.Search.FieldCacheImpl.GetStringIndex(IndexReader reader, String field)
at Lucene.Net.Search.FieldComparator.StringOrdValComparator.SetNextReader(IndexReader reader, Int32 docBase)
at Lucene.Net.Search.TopFieldCollector.OneComparatorNonScoringCollector.SetNextReader(IndexReader reader, Int32 docBase)
at Lucene.Net.Search.IndexSearcher.Search(Weight weight, Filter filter, Collector collector)
at Lucene.Net.Search.IndexSearcher.Search(Weight weight, Filter filter, Int32 nDocs, Sort sort, Boolean fillFields)
at Lucene.Net.Search.IndexSearcher.Search(Weight weight, Filter filter, Int32 nDocs, Sort sort)
at Lucene.Net.Search.Hits.GetMoreDocs(Int32 min)
at Lucene.Net.Search.Hits..ctor(Searcher s, Query q, Filter f, Sort o)
at Lucene.Net.Search.Searcher.Search(Query query, Sort sort)
Such errors may occur due to concurrency issues and caused by a non-thread safe WeakHashTable collection used in Lucene.NET 2.9.4.
To address the issue, apply the following patch: