public HashMap calculateIDFOnly() { IndexReader reader = null; HashMap inverseDFMap = new HashMap<>(); try { reader = DirectoryReader.open(FSDirectory .open(new File(indexFolder).toPath())); // String targetTerm = "breakpoint"; Fields fields = MultiFields.getFields(reader); for (String field : fields) { Terms terms = fields.terms(field); TermsEnum termsEnum = terms.iterator(); BytesRef bytesRef; while ((bytesRef = termsEnum.next()) != null) { if (termsEnum.seekExact(bytesRef)) { String term = bytesRef.utf8ToString(); this.keys.add(term); } } } // now go for the IDF int N = reader.numDocs(); double maxIDF = 0; for (String term : this.keys) { Term t = new Term(FIELD_CONTENTS, term); int docFreq = reader.docFreq(t); double idf = getIDF(N, docFreq); if (!inverseDFMap.containsKey(term)) { inverseDFMap.put(term, idf); if (idf > maxIDF) { maxIDF = idf; } } } // now normalize the IDF scores for (String term : this.keys) { double idf = inverseDFMap.get(term); idf = idf / maxIDF; inverseDFMap.put(term, idf); } } catch (Exception exc) { // handle the exception } return inverseDFMap; }