【lucene】PostingsEnum.freq()
在 Lucene 中,`PostingsEnum.freq()` 返回的正是当前文档内该 term 出现的次数,也就是词频(term frequency, tf)。
简单梳理一下流程:
1. 你通过 `TermsEnum.postings()` 或 `MultiTerms.getTermState()` 之类的方法拿到某个 term 的倒排表迭代器 `PostingsEnum`。
2. 然后调用 `PostingsEnum.nextDoc()` 遍历包含该 term 的所有文档。
3. 每定位到一个文档(docID),调用 `PostingsEnum.freq()` 就能拿到这个 term 在这个文档中的出现次数。
举个例子:
```java
PostingsEnum postings = termsEnum.postings(null, PostingsEnum.FREQS);
while (postings.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
int docID = postings.docID();
int freq = postings.freq(); // 当前文档中该 term 的词频
System.out.println("docID: " + docID + ", freq: " + freq);
}
```
所以,`PostingsEnum.freq()` 就是针对当前 term 在指定文档中的词频,不是整个索引,也不是所有文档,也不是所有 term。