@Override public int getId() { return current.getId(); }
@Override public int getId() { return current.getId(); }
@Override public int next() throws IOException { index++; if (index >= postings.length) return EOL; current = postings[index][slice]; while(current == null) { index++; if (index >= postings.length) return EOL; current = postings[index][slice]; } return current.getId(); }
@Override public int next() throws IOException { index++; if (index >= postings.length) return EOL; current = postings[index][slice]; while(current == null) { index++; if (index >= postings.length) return EOL; current = postings[index][slice]; } return current.getId(); }
p.readFields(in); assert docids[i] == p.getId();
p.readFields(in); assert docids[i] == p.getId();
@Override public void sort(int topDocs) { HeapSort.descendingHeapSort(getScores(), getDocids(), getOccurrences(), topDocs); TIntIntHashMap sortedOrder = new TIntIntHashMap(postings.length); for(int i=0;i<docids.length;i++) { sortedOrder.put(docids[i], i); } WritablePosting[][] tmp = new WritablePosting[postings.length][]; for(int i=0;i<docids.length;i++) { int docid = -1; for(int j=0;j<postings[i].length;j++) if (postings[i][j] != null) { docid = postings[i][j].getId(); break; } assert docid != -1; tmp[sortedOrder.get(docid)] = postings[i]; } postings = tmp; }
@Override public void sort(int topDocs) { HeapSort.descendingHeapSort(getScores(), getDocids(), getOccurrences(), topDocs); TIntIntHashMap sortedOrder = new TIntIntHashMap(postings.length); for(int i=0;i<docids.length;i++) { sortedOrder.put(docids[i], i); } WritablePosting[][] tmp = new WritablePosting[postings.length][]; for(int i=0;i<docids.length;i++) { int docid = -1; for(int j=0;j<postings[i].length;j++) if (postings[i][j] != null) { docid = postings[i][j].getId(); break; } assert docid != -1; tmp[sortedOrder.get(docid)] = postings[i]; } postings = tmp; }
assert postings[di][ti].getId() == docids[di] : "At position "+di+" in resultset, Posting id " + docids[di] + " for term "+ti+" was expected, found id " +postings[di][ti].getId()+ " with contents " + postings[di][ti].toString() ; assert postings[di][ti].getFrequency() > 0; final WritablePosting p = postings[di][ti];
assert postings[di][ti].getId() == docids[di] : "At position "+di+" in resultset, Posting id " + docids[di] + " for term "+ti+" was expected, found id " +postings[di][ti].getId()+ " with contents " + postings[di][ti].toString() ; assert postings[di][ti].getFrequency() > 0; final WritablePosting p = postings[di][ti];
@Override protected void assignScore(final int i, final CandidateResult cc) throws IOException { //update the score as normal cc.updateScore(plm.score(i)); cc.updateOccurrence((i < 16) ? (short)(1 << i) : 0); //get a deep copy of the posting final Posting p = plm.getPosting(i); //writable postings don't copy or retain document length. Make this not so. final WritablePosting wp = p.asWritablePosting(); assert wp.getId() == cc.getDocId() : "Posting does not have same docid as candidate result"; wp.setDocumentLength(p.getDocumentLength()); if (fields[i]) { final int[] fieldLengths = ((FieldPosting)p).getFieldLengths(); final int[] newFieldLengths = new int[fieldCount]; System.arraycopy(fieldLengths, 0, newFieldLengths, 0, fieldCount); //System.err.println(fieldLengths); assert fieldLengths.length == super.collectionStatistics.getNumberOfFields() : " posting "+p +" for docid " + p.getId() + " has wrong number of fields for length"; ((FieldPosting)wp).setFieldLengths(newFieldLengths); } //store somewhere ((FatCandidateResult)cc).setPosting(i, wp); } }
@Override protected void assignScore(final int i, final CandidateResult cc) throws IOException { //update the score as normal cc.updateScore(plm.score(i)); cc.updateOccurrence((i < 16) ? (short)(1 << i) : 0); //get a deep copy of the posting final Posting p = plm.getPosting(i); //writable postings don't copy or retain document length. Make this not so. final WritablePosting wp = p.asWritablePosting(); assert wp.getId() == cc.getDocId() : "Posting does not have same docid as candidate result"; wp.setDocumentLength(p.getDocumentLength()); if (fields[i]) { final int[] fieldLengths = ((FieldPosting)p).getFieldLengths(); final int[] newFieldLengths = new int[fieldCount]; System.arraycopy(fieldLengths, 0, newFieldLengths, 0, fieldCount); //System.err.println(fieldLengths); assert fieldLengths.length == super.collectionStatistics.getNumberOfFields() : " posting "+p +" for docid " + p.getId() + " has wrong number of fields for length"; ((FieldPosting)wp).setFieldLengths(newFieldLengths); } //store somewhere ((FatCandidateResult)cc).setPosting(i, wp); } }
assertEquals(1, rs.getPostings().length); assertEquals(1, rs.getPostings()[0].length); assertEquals(20, rs.getPostings()[0][0].getId()); assertEquals(5, rs.getPostings()[0][0].getFrequency());
System.out.println(frInput.getScores()[0]); assertTrue(frInput.getScores()[0] > 0); assertEquals(0, frInput.getPostings()[0][0].getId()); assertEquals(1, frInput.getPostings()[0][0].getFrequency()); assertEquals(8, frInput.getPostings()[0][0].getDocumentLength());
System.out.println(frInput.getScores()[0]); assertTrue(frInput.getScores()[0] > 0); assertEquals(0, frInput.getPostings()[0][0].getId()); assertEquals(1, frInput.getPostings()[0][0].getFrequency()); assertEquals(8, frInput.getPostings()[0][0].getDocumentLength());
assertEquals(0, frInput.getDocids()[0]); assertTrue(frInput.getScores()[0] > 0); assertEquals(0, frInput.getPostings()[0][0].getId()); assertEquals(1, frInput.getPostings()[0][0].getFrequency()); assertEquals(1, frInput.getPostings()[0][0].getDocumentLength());
frInput.getScores()[0] = 0.1d; assertEquals(0, frInput.getPostings()[0][0].getId()); assertEquals(1, frInput.getPostings()[0][0].getFrequency()); assertEquals(1, frInput.getPostings()[0][0].getDocumentLength());