Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option 1: freqs of top docs
- IndexSearcher searcher = ...;
- Query query = ...;
- Term term = ...; // term that we want to count freqs of
- TopDocs topDocs = searcher.search(query, 10);
- for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
- int leafIndex = ReaderUtil.subIndex(scoreDoc.doc, searcher.getIndexReader().leaves());
- LeafReaderContext leaf = searcher.getIndexReader().leaves().get(leafIndex);
- PostingsEnum postings = leaf.reader().postings(term);
- int numOccurrences;
- if (postings.advance(scoreDoc.doc - leaf.docBase) == scoreDoc.doc - leaf.docBase) {
- numOccurrences = postings.freq();
- } else {
- numOccurrences = 0;
- }
- }
- Option 2: freqs from a collector
- IndexSearcher searcher = ...;
- Query query = ...;
- searcher.search(query, new Collector() {
- @Override
- public boolean needsScores() {
- return true;
- }
- @Override
- public LeafCollector getLeafCollector(LeafReaderContext context) throws IOException {
- return new LeafCollector() {
- Scorer scorer;
- @Override
- public void setScorer(Scorer scorer) throws IOException {
- this.scorer = scorer;
- }
- @Override
- public void collect(int doc) throws IOException {
- int numOccurrencess = scorer.freq();
- }
- };
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment