Lucene. Сеть, что я делаю неправильно?

Eric Lippert говорит существует 4 вида исключений.

  • Критические исключения не являются Вашим отказом, Вы не можете предотвратить их, и Вы не можете разумно вымыться от них.
  • Глупыми исключениями является Ваш собственный проклятый отказ, Вы, возможно, предотвратили их, и поэтому они - ошибки в Вашем коде.
  • Раздражающими исключениями является результат неудачных проектных решений. Раздражающие исключения выдаются при абсолютно неисключительном обстоятельстве, и поэтому должны быть пойманы и обработаны все время.
  • И наконец, внешние исключения, кажется, похожи на несколько раздражающие исключения за исключением того, что они не результат неудачных проектных решений. Скорее они - результат неопрятных внешних фактов, посягающих на Вашу красивую, четкую логику программы.

Ваш конструктор никогда не должен выдавать критическое исключение самостоятельно, но код, который оно выполняет, может вызвать критическое исключение. Что-то как "из памяти" не является чем-то, чем можно управлять, но если она происходит в конструкторе, эй, это происходит.

Глупые исключения никогда не должны происходить ни в одном Вашем коде, таким образом, они правы.

Раздражающие исключения (пример Int32.Parse()) не должны быть выданы конструкторами, потому что у них нет неисключительных обстоятельств.

Наконец, внешних исключений нужно избежать, но если Вы делаете что-то в своем конструкторе, который зависит от внешних обстоятельств (как сетевая или файловая система), было бы уместно выдать исключение.

Ссылка: https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions /

5
задан dnoxs 4 December 2009 в 16:03
поделиться

1 ответ

Я думаю, что при построении вашего индекса возникла проблема. Вы добавляете четыре поля в каждый документ, все они сохраняются, но ни одно из них не индексируется (=> 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);
5
ответ дан 14 December 2019 в 19:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: