/** * Constructs an instance of FieldORIterablePosting. * @param ips * @throws IOException */ public FieldORIterablePosting(IterablePosting[] ips) throws IOException { super(ips); fieldCount = ((FieldPosting)ips[0]).getFieldFrequencies().length; fieldFreqs = new int[fieldCount]; fieldLens = new int[fieldCount]; }
/** * Constructs an instance of FieldORIterablePosting. * @param ips * @throws IOException */ public FieldORIterablePosting(IterablePosting[] ips) throws IOException { super(ips); fieldCount = ((FieldPosting)ips[0]).getFieldFrequencies().length; fieldFreqs = new int[fieldCount]; fieldLens = new int[fieldCount]; }
@Override public int[] getFieldFrequencies() { return ((FieldPosting)current).getFieldFrequencies(); }
@Override public int[] getFieldFrequencies() { return ((FieldPosting)current).getFieldFrequencies(); }
@Override public int[] getFieldFrequencies() { return ((FieldPosting)current).getFieldFrequencies(); }
@Override public int[] getFieldFrequencies() { return ((FieldPosting)current).getFieldFrequencies(); }
@Override protected void addPosting(Posting _p) { super.addPosting(_p); FieldPosting p = (FieldPosting)_p; final int[] thisPostingFieldFreqs = p.getFieldFrequencies(); for(int fi=0;fi<fieldCount;fi++) fieldFreqs[fi] += thisPostingFieldFreqs[fi]; }
@Override protected void addPosting(Posting _p) { super.addPosting(_p); FieldPosting p = (FieldPosting)_p; final int[] thisPostingFieldFreqs = p.getFieldFrequencies(); for(int fi=0;fi<fieldCount;fi++) fieldFreqs[fi] += thisPostingFieldFreqs[fi]; }
@Override public int next() throws IOException { while( (currentId = iterableParent.next()) != EOL) { final int fieldFreq = fieldParent.getFieldFrequencies()[fieldId]; if (fieldFreq > 0) { frequency = fieldFreq; return currentId; } } return EOL; }
@Override public int next() throws IOException { while( (currentId = iterableParent.next()) != EOL) { final int fieldFreq = fieldParent.getFieldFrequencies()[fieldId]; if (fieldFreq > 0) { frequency = fieldFreq; return currentId; } } return EOL; }
@Override protected void firstPosting(Posting _p) { super.firstPosting(_p); FieldPosting p = (FieldPosting)_p; System.arraycopy(p.getFieldFrequencies(), 0, fieldFreqs, 0, fieldCount); System.arraycopy(p.getFieldLengths(), 0, fieldLens, 0, fieldCount); }
@Override protected void firstPosting(Posting _p) { super.firstPosting(_p); FieldPosting p = (FieldPosting)_p; System.arraycopy(p.getFieldFrequencies(), 0, fieldFreqs, 0, fieldCount); System.arraycopy(p.getFieldLengths(), 0, fieldLens, 0, fieldCount); }
@Override protected void writePostingNotDocid(Posting _p) throws IOException { super.writePostingNotDocid(_p); final FieldPosting p = (FieldPosting)_p; for(int fieldFrequency : p.getFieldFrequencies()) { super.output.writeUnary(fieldFrequency+1); } //System.err.println("FieldDirectInvertedOutputStream: " + ArrayUtils.join(p.getFieldFrequencies(), ",")); }
/** Get an array of all the ids in a given IterablePosting stream, * where the length of the stream is known */ public static int[][] getAllPostingsWithFields(final IterablePosting ip, final int numPointers, final int fieldCount) throws IOException { FieldPosting fp = (FieldPosting)ip; final int[][] rtr = new int[2+fieldCount][numPointers]; for(int i=0;ip.next() != IterablePosting.EOL;i++) { rtr[0][i] = ip.getId(); rtr[1][i] = ip.getFrequency(); int[] tff = fp.getFieldFrequencies(); for(int j=0;j<fieldCount;j++) { rtr[j+2][i] = tff[j]; } } return rtr; }
/** Get an array of all the ids in a given IterablePosting stream, * where the length of the stream is known */ public static int[][] getAllPostingsWithFields(final IterablePosting ip, final int numPointers, final int fieldCount) throws IOException { FieldPosting fp = (FieldPosting)ip; final int[][] rtr = new int[2+fieldCount][numPointers]; for(int i=0;ip.next() != IterablePosting.EOL;i++) { rtr[0][i] = ip.getId(); rtr[1][i] = ip.getFrequency(); int[] tff = fp.getFieldFrequencies(); for(int j=0;j<fieldCount;j++) { rtr[j+2][i] = tff[j]; } } return rtr; }
@Override public double score(Posting _p) { FieldPosting p = (FieldPosting)_p; final int[] tff = p.getFieldFrequencies(); final int[] fieldLengths = p.getFieldLengths(); final double[] normFieldFreqs = new double[fieldCount]; for(int i=0;i<fieldCount;i++) { if (tff[i] != 0.0d) normFieldFreqs[i] = fieldWeights[i] * fieldNormalisations[i].normalise(tff[i], fieldLengths[i], fieldGlobalFrequencies[i]); } final double tf = StaTools.sum(normFieldFreqs); //System.err.println("tf=" + tf); if (tf == 0.0d) return 0.0d; return basicModel.score(tf, super.documentFrequency, super.termFrequency, super.keyFrequency, p.getDocumentLength()); }
@Override public double score(Posting _p) { FieldPosting p = (FieldPosting)_p; final int[] tff = p.getFieldFrequencies(); final int[] fieldLengths = p.getFieldLengths(); final double[] normFieldFreqs = new double[fieldCount]; for(int i=0;i<fieldCount;i++) { if (tff[i] != 0.0d) normFieldFreqs[i] = fieldWeights[i] * fieldNormalisations[i].normalise(tff[i], fieldLengths[i], fieldGlobalFrequencies[i]); } final double tf = StaTools.sum(normFieldFreqs); //System.err.println("tf=" + tf); if (tf == 0.0d) return 0.0d; return basicModel.score(tf, super.documentFrequency, super.termFrequency, super.keyFrequency, p.getDocumentLength()); }
public static void compareFieldPostings(List<Posting> inputPostings, IterablePosting outputPostings) throws Exception { for(Posting p : inputPostings) { assertEquals(p.getId(), outputPostings.next()); assertEquals(p.getId(), outputPostings.getId()); assertEquals(p.getFrequency(), outputPostings.getFrequency()); assertArrayEquals(((FieldPosting) p).getFieldFrequencies(), ((FieldPosting) p).getFieldFrequencies()); } assertTrue(outputPostings.next() == IterablePosting.EOL); assertTrue(outputPostings.getId() == IterablePosting.EOL); //TR-519 }
public static void compareBlockFieldPostings(List<Posting> inputPostings, IterablePosting outputPostings) throws Exception { for(Posting p : inputPostings) { assertEquals(p.getId(), outputPostings.next()); assertEquals(p.getId(), outputPostings.getId()); assertEquals(p.getFrequency(), outputPostings.getFrequency()); assertArrayEquals(((FieldPosting) p).getFieldFrequencies(), ((FieldPosting) p).getFieldFrequencies()); assertArrayEquals(((BlockPosting) p).getPositions(), ((BlockPosting) p).getPositions()); } assertTrue(outputPostings.next() == IterablePosting.EOL); assertTrue(outputPostings.getId() == IterablePosting.EOL); //TR-519 }
@Test public void testSingleDocumentIndexMatchingFields() throws Exception { ResultSet rs = _testSingleDocumentIndexMatchingFields(); //get postings from ResultSet for first ranked document assertTrue(rs instanceof FatCandidateResultSet); Posting[] postings = ((FatCandidateResultSet)rs).getPostings()[0]; assertEquals(1, postings.length); assertEquals(0, postings[0].getId()); assertEquals(1, postings[0].getFrequency()); assertEquals(9, postings[0].getDocumentLength()); FieldPosting p = (FieldPosting)postings[0]; assertEquals(1, p.getFieldFrequencies()[0]); assertEquals(0, p.getFieldFrequencies()[1]); assertEquals(2, p.getFieldLengths()[0]); assertEquals(7, p.getFieldLengths()[1]); }