Арифметическая операция привела к переполнению Lucene.Net 2.4

Я использую Lucene.net 2.4 для веб-сайта клиента с тяжелым программным использованием запросов: логические запросы, нечеткие запросы, разные веса, префиксы и т. Д.

Иногда очень случайным образом возникает следующая ошибка:

Арифметическая операция привела к переполнению в Lucene.Net.Util.PriorityQueue.Initialize (Int32 maxSize) в Lucene.Net.Search.FuzzyQuery.ScoreTermQueue..ctor (размер Int32) в Lucene.Net.Search.FuzzyQuery.Rewrite (считыватель IndexReader ) в Lucene.Net.Search.BooleanQuery.Rewrite (читатель IndexReader) в Lucene.Net.Search.BooleanQuery.Rewrite (читатель IndexReader) в Lucene.Net.Search.BooleanQuery.Rewrite (читатель IndexReader) в Lucene.Net.Search. BooleanQuery.Rewrite (считыватель IndexReader) в Lucene.Net.Search.BooleanQuery.Rewrite (считыватель IndexReader) в Lucene.Net.Search.IndexSearcher.Rewrite (исходный запрос) в Lucene.Net.Search.Query.Weight (поисковик-поисковик) в Lucene.Net.Search.Searcher.CreateWeight (запрос запроса) в Lucene.Net.Search.Searcher.Search (запрос запроса, фильтр фильтра, Int32 n)

И затем кажется, что Lucene заблокирован, потому что мне нужно перезапустить веб-сайт, чтобы поиск lucene снова заработал.

К сожалению, веб-сайт недоступен для не-пользователей, поэтому я не могу дать вам URL-адрес.

Но если кто-то когда-либо сталкивался с этой проблемой раньше, я был бы благодарен за рекомендации по ее решению.

ОБНОВЛЕНИЕ: я помню, что я немного ранее заново сгенерировал полный индекс в другой папке и поменял его местами вручную, не перезапуская пул приложений на сайте. Это могло произойти из-за того, что нет?

Ура Фабрис


person fabrice    schedule 22.02.2010    source источник


Ответы (1)


Если вы используете BooleanQuery.SetMaxClauseCount (int) убедитесь, что оно как минимум на 1 меньше, чем Int32.MaxValue.

FuzzyQuery.Rewrite () создает PriorityQueue с размером BooleanQuery.GetMaxClauseCount () +1, что вызывает исключение переполнения.

person Jf Beaulac    schedule 10.06.2010