Eric Lippert говорит существует 4 вида исключений.
Ваш конструктор никогда не должен выдавать критическое исключение самостоятельно, но код, который оно выполняет, может вызвать критическое исключение. Что-то как "из памяти" не является чем-то, чем можно управлять, но если она происходит в конструкторе, эй, это происходит.
Глупые исключения никогда не должны происходить ни в одном Вашем коде, таким образом, они правы.
Раздражающие исключения (пример Int32.Parse()
) не должны быть выданы конструкторами, потому что у них нет неисключительных обстоятельств.
Наконец, внешних исключений нужно избежать, но если Вы делаете что-то в своем конструкторе, который зависит от внешних обстоятельств (как сетевая или файловая система), было бы уместно выдать исключение.
Ссылка: https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions /
Я думаю, что при построении вашего индекса возникла проблема. Вы добавляете четыре поля в каждый документ, все они сохраняются, но ни одно из них не индексируется (=> Lucene.Net.Documents.Field.Index.NO). Вы должны проиндексировать как минимум одно поле.
Помните, что StandardAnalyzer токенизирует каждый индекс поля следующим образом: нижний регистр и разделение с помощью обычных английских стоп-слов. Поэтому при построении запроса используйте префикс LOWERCASE для получения совпадений:
query.Add(new PrefixQuery(new Term("B", "lala")), BooleanClause.Occur.MUST);
query.Add(new PrefixQuery(new Term("C", "dodo")), BooleanClause.Occur.MUST);