Ответ 1
Пожалуйста, следуйте Руководство по переносу Lucene 4:
Как вы получили перечисления, изменилось. Основной точкой входа является
Fields
класс. Если вы знаете, что ваш читатель является читателем на одном сегменте, это:Fields fields = reader.Fields(); if (fields != null) { ... }
Если читатель может быть многосегментным, вы должны сделать это:
Fields fields = MultiFields.getFields(reader); if (fields != null) { ... }
Fields
может бытьnull
(например, если у читателя нет полей).Обратите внимание, что подход
MultiFields
влечет за собойMultiReaders
, так как он должен объединять термины/документы/позиции "на лету". Это как правило, лучше получать последовательные читатели (используйтеoal.util.ReaderUtil
), а затем пройдите через самих читателей, если вы можете (так Lucene ищет поиск).Если вы передадите
SegmentReader
вMultiFields.fields
, он просто returnreader.fields()
, поэтому в этом случае нет производительности.Как только у вас есть ненулевые поля, вы можете сделать это:
Terms terms = fields.terms("field"); if (terms != null) { ... }
terms
может бытьnull
(например, если поле не существует).Как только у вас есть условия не
null
, вы можете получить перечисление следующим образом:TermsEnum termsEnum = terms.iterator();
Возвращенный
TermsEnum
не будет равен нулю.Вы можете
.next()
черезTermsEnum