- /**
- * Tries to add new documents to hitDocs.
- * Ensures that the hit numbered <code>min</code> has been retrieved.
- */
- private final void getMoreDocs(int min) throws IOException {
- if (hitDocs.size() > min) {
- min = hitDocs.size();
- }
- int n = min * 2; // double # retrieved
- TopDocs topDocs = (sort == null) ? searcher.search(weight, filter, n) :
- searcher.search(weight, filter, n, sort);
- length = topDocs.totalHits;
- ScoreDoc[] scoreDocs = topDocs.scoreDocs;
- float scoreNorm = 1.0f;
- if (length > 0 && topDocs.getMaxScore() > 1.0f) {
- scoreNorm = 1.0f / topDocs.getMaxScore();
- }
- int start = hitDocs.size() - nDeletedHits;
- // any new deletions?
- int nDels2 = countDeletions(searcher);
- debugCheckedForDeletions = false;
- if (nDeletions < 0 || nDels2 > nDeletions) {
- // either we cannot count deletions, or some "previously valid hits"
- might have been deleted, so find exact start point
- nDeletedHits = 0;
- debugCheckedForDeletions = true;
- int i2 = 0;
- for (int i1=0; i1<hitDocs.size() && i2<scoreDocs.length; i1++) {
- int id1 = ((HitDoc)hitDocs.get(i1)).id;
- int id2 = scoreDocs[i2].doc;
- if (id1 == id2) {
- i2++;
- } else {
- nDeletedHits ++;
- }
- }
- start = i2;
- }
- int end = scoreDocs.length < length ? scoreDocs.length : length;
- length += nDeletedHits;
- for (int i = start; i < end; i++) {
- hitDocs.addElement(new HitDoc(scoreDocs[i].score * scoreNorm,
- scoreDocs[i].doc));
- }
- nDeletions = nDels2;
- }
org.apache.lucene.search.Hits.java搜索索引
最新推荐文章于 2021-09-17 11:32:10 发布