您的位置:首页 > 运维架构 > Apache

org.apache.lucene.search.Hits.java搜索索引

2008-10-28 20:45 447 查看
/**

* 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐