Что вам нужно сделать, это использовать IndexReader.terms()
для перечисления терминов, IndexReader.docFreq(Term t)
для получения количества документов, содержащих термин (для IDF), и IndexReader.termDocs(Term t)
для получения значения DF для каждого термина, пары документов , Используя эту информацию, вы сможете передавать данные в Mapper, который затем будет выполнять их подсчет. Обратите внимание, что вызов termDocs
представляет документ по его внутреннему целочисленному номеру, поэтому вы не сможете изменить индекс при выполнении этого вычисления, поскольку вы не сможете отобразить номера документов обратно в документы после изменения индекса. Чтобы обойти это, либо не изменяйте индекс до тех пор, пока не будут обработаны результаты шага сокращения, либо, получив номер документа, преобразуйте его во внешний идентификатор, прочитав соответствующее поле из документа и передав его в Картограф.