Package it.unimi.dsi.mg4j.search

Examples of it.unimi.dsi.mg4j.search.DocumentIterator


    final IntOpenHashSet alreadySeen = query.length > 1 ? new IntOpenHashSet() : null;

    for( int i = 0; i < query.length; i++ ) {
      final int initialResultSize = results.size();
     
      DocumentIterator documentIterator = query[ i ].accept( builderVisitor.prepare() );
     
      count = scorer != null?
          getScoredResults( documentIterator, currOffset, currLength, lastMinScore, results, alreadySeen ) :
            getResults( documentIterator, currOffset, currLength, results, alreadySeen );
         
      documentIterator.dispose();
      if ( results.size() > 0 ) lastMinScore = results.get( results.size() - 1 ).score;
     
      total += count;
      currOffset -= count;

      if ( currOffset < 0 ) {
        currLength += currOffset;
        currOffset = 0;
      }

      // Check whether we have intervals, we want intervals *and* we added some results.
      boolean someHavePositions = false;
      for( Index index: documentIterator.indices() ) someHavePositions |= index.hasPositions;
     
      if ( someHavePositions && intervalSelector != null && results.size() != initialResultSize ) {
        // We must now enrich the returned result with intervals
        DocumentScoreInfo<Reference2ObjectMap<Index,SelectedInterval[]>> sorted[] =
          results.subList( initialResultSize, results.size() ).toArray( new DocumentScoreInfo[ results.size() - initialResultSize ] );
        ObjectArrays.quickSort( sorted, DocumentScoreInfo.DOCUMENT_COMPARATOR );

        documentIterator = query[ i ].accept( builderVisitor.prepare() );
     
        for( DocumentScoreInfo<Reference2ObjectMap<Index,SelectedInterval[]>> dsi: sorted ) {
          documentIterator.skipTo( dsi.document );
          dsi.info = intervalSelector.select( documentIterator, new Reference2ObjectArrayMap<Index,SelectedInterval[]>( numIndices ) );
        }
     
        documentIterator.dispose();
      }
     
      if ( ASSERTS ) assert length >= results.size();
      if ( length == results.size() ) break;
    }
View Full Code Here


  }

  public IndexIterator documents( final CharSequence prefix, final int limit ) throws IOException, TooManyTermsException {
    final ArrayList<DocumentIterator> iterators = new ArrayList<DocumentIterator>( localIndex.length );

    DocumentIterator documentIterator;
    for ( int i = 0; i < localIndex.length; i++ ) {
      // TODO: check for limit globally
      documentIterator = localIndex[ i ].documents( prefix, limit );
      if ( documentIterator.hasNext() ) iterators.add( documentIterator );
    }
    // TODO: test that this multiterm-of-multiterm actually works.
    return MultiTermIndexIterator.getInstance( this, iterators.toArray( IndexIterators.EMPTY_ARRAY ) );
  }
View Full Code Here

import junit.framework.TestCase;

public class NotDocumentIteratorTest extends TestCase {

  public void testNot() throws IOException {
    DocumentIterator i = new IntArrayDocumentIterator( new int[] { 2, 4, 7 },
        new int[][][] {
        { { 0, 1 }, { 1, 2 } },
        { { 1, 2 } },
        { {} },
        } );
View Full Code Here

    assertFalse( notDocumentIterator.hasNext() );
    notDocumentIterator.dispose();
  }
 
  public void testSkip() throws IOException {
    DocumentIterator i = new IntArrayDocumentIterator( new int[] { 2, 4, 7 },
        new int[][][] {
        { { 0, 1 }, { 1, 2 } },
        { { 1, 2 } },
        { {} },
        } );
View Full Code Here

    assertEquals( 8, notDocumentIterator.skipTo( 8 ) );
    assertEquals( Integer.MAX_VALUE, notDocumentIterator.skipTo( 9 ) );
  }
 
  public void testSkipAtStart() throws IOException {
    DocumentIterator i = new IntArrayDocumentIterator( new int[] { 0, 3 },
        new int[][][] {
        { { 0 } },
        { { 0 } },
        } );
   
View Full Code Here

    index = DiskBasedIndex.getInstance( basename + "-text", true, true );
    simpleParser = new SimpleParser( index.termProcessor );

    Query query = simpleParser.parse( "(a|b|d)<(a|b|d)" );
    DocumentIteratorBuilderVisitor documentIteratorBuilderVisitor = new DocumentIteratorBuilderVisitor( null, index, Integer.MAX_VALUE );
    DocumentIterator documentIterator = query.accept( documentIteratorBuilderVisitor );
    documentIterator.nextDocument();
    IntervalIterator intervalIterator = documentIterator.intervalIterator();
    assertEquals( Interval.valueOf( 0, 1 ), intervalIterator.nextInterval() );
    assertEquals( Interval.valueOf( 1, 2 ), intervalIterator.nextInterval() );
    assertEquals( Interval.valueOf( 2, 4 ), intervalIterator.nextInterval() );
    assertFalse( intervalIterator.hasNext() );
    documentIterator.dispose();
  }
View Full Code Here

    assertFalse( intervalIterator.hasNext() );
    documentIterator.dispose();
  }
 
  public void testTrue() throws IOException {
    DocumentIterator i0 = new IntArrayDocumentIterator( new int[] { 0, 1, 2, 3 },
        new int[][][] {
        { { 0, 1 }, { 1, 2 } },
        { { 0, 1 }, { 1, 2 } },
        { {} },
        { { 0 }, { 1 }, { 2 } },
        } );
    DocumentIterator i1 = new IntArrayDocumentIterator( new int[] { 0, 1, 2, 3 },
        new int[][][] {
        { {} },
        { {} },
        { { 2 } },
        { { 0 }, { 1 }, { 2 } },
        } );
    DocumentIterator i2 = new IntArrayDocumentIterator( new int[] { 0, 1, 2, 3 },
        new int[][][] {
        { {} },
        { { 3 } },
        { {} },
        { { 0 }, { 1 }, { 2 } },
        } );
    DocumentIterator orderedAndDocumentIterator = OrderedAndDocumentIterator.getInstance( i0, i1, i2 );
    assertTrue( orderedAndDocumentIterator.hasNext() );
    assertEquals( 0, orderedAndDocumentIterator.nextDocument() );
    assertEquals( 0, orderedAndDocumentIterator.document() );
    assertEquals( Interval.valueOf( 0, 1 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertEquals( Interval.valueOf( 1, 2 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 1, orderedAndDocumentIterator.nextDocument() );
    assertEquals( 1, orderedAndDocumentIterator.document() );
    assertEquals( Interval.valueOf( 1, 3 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 2, orderedAndDocumentIterator.nextDocument() );
    assertEquals( 2, orderedAndDocumentIterator.document() );
    assertEquals( Interval.valueOf( 2 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 3, orderedAndDocumentIterator.nextDocument() );
    assertEquals( 3, orderedAndDocumentIterator.document() );
    assertEquals( Interval.valueOf( 0, 2 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
    assertFalse( orderedAndDocumentIterator.hasNext() );
  }
View Full Code Here

    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
    assertFalse( orderedAndDocumentIterator.hasNext() );
  }

  public void testAllAlignmentFailures() throws IOException {
    DocumentIterator i0 = new IntArrayDocumentIterator( new int[] { 0, 1, 2, 3, 4 },
        new int[][][] {
        { { 0, 1 }, { 1, 2 } },
        { { 0, 1 }, { 1, 4 } },
        { { 1 }, { 2 } },
        { { 0, 1 }, { 1, 4 } },
        { { 0, 1 }, { 1, 5 } },
        } );
    DocumentIterator i1 = new IntArrayDocumentIterator( new int[] { 0, 1, 2, 3, 4 },
        new int[][][] {
        { { 2, 4 } },
        { { 2, 4 }, { 5, 6 } },
        { { 2 }, { 3 } },
        { { 2, 3 }, { 5 } },
        { { 2, 3 }, { 5 } },
        } );
    DocumentIterator i2 = new IntArrayDocumentIterator( new int[] { 0, 1, 2, 3, 4 },
        new int[][][] {
        { { 6, 7 } },
        { { 6, 7 } },
        { { 1, 2 }, { 2, 3 }, { 4 } },
        { { 6, 7 } },
        { { 6, 7 } },
        } );
    DocumentIterator orderedAndDocumentIterator = OrderedAndDocumentIterator.getInstance( i0, i1, i2 );
    assertTrue( orderedAndDocumentIterator.hasNext() );
    assertEquals( 0, orderedAndDocumentIterator.nextDocument() );
    assertEquals( Interval.valueOf( 0, 7 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 1, orderedAndDocumentIterator.nextDocument() );
    assertEquals( Interval.valueOf( 0, 7 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 2, orderedAndDocumentIterator.nextDocument() );
    assertEquals( Interval.valueOf( 2, 4 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 3, orderedAndDocumentIterator.nextDocument() );
    assertEquals( Interval.valueOf( 1, 7 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 4, orderedAndDocumentIterator.nextDocument() );
    assertEquals( Interval.valueOf( 0, 7 ), orderedAndDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( orderedAndDocumentIterator.intervalIterator().hasNext() );
  }
View Full Code Here


  public void testSkipBug() throws QueryParserException, QueryBuilderVisitorException, IOException {
    Query query = simpleParser.parse( "a + b + c" );
    DocumentIteratorBuilderVisitor documentIteratorBuilderVisitor = new DocumentIteratorBuilderVisitor( null, index, Integer.MAX_VALUE );
    DocumentIterator documentIterator = query.accept( documentIteratorBuilderVisitor );
    assertEquals( 2, documentIterator.skipTo( 2 ) );
    documentIterator.dispose();
  }
View Full Code Here

        { {} },
        { { 2 }, { 5 } },
        { {} },
        { { 2 } },
        } );
    DocumentIterator consecutiveDocumentIterator = ConsecutiveDocumentIterator.getInstance( i0, i1, i2 );
    assertTrue( consecutiveDocumentIterator.hasNext() );
    assertEquals( 0, consecutiveDocumentIterator.nextDocument() );
    assertEquals( 0, consecutiveDocumentIterator.document() );
    assertEquals( Interval.valueOf( 0, 1 ), consecutiveDocumentIterator.intervalIterator().nextInterval() );
    assertEquals( Interval.valueOf( 1, 2 ), consecutiveDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( consecutiveDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 1, consecutiveDocumentIterator.nextDocument() );
    assertEquals( 1, consecutiveDocumentIterator.document() );
    assertEquals( Interval.valueOf( 0, 2 ), consecutiveDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( consecutiveDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 2, consecutiveDocumentIterator.nextDocument() );
    assertEquals( 2, consecutiveDocumentIterator.document() );
    assertEquals( Interval.valueOf( 2 ), consecutiveDocumentIterator.intervalIterator().nextInterval() );
    assertEquals( 3, consecutiveDocumentIterator.nextDocument() );
    assertEquals( 3, consecutiveDocumentIterator.document() );
    assertEquals( Interval.valueOf( 0, 2 ), consecutiveDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( consecutiveDocumentIterator.intervalIterator().hasNext() );
   
    i0.reset();
    i1.reset();
    i2.reset();

    consecutiveDocumentIterator = ConsecutiveDocumentIterator.getInstance( i0, i1, i2 );
    assertEquals( 2, consecutiveDocumentIterator.skipTo( 2 ) );
    assertEquals( 2, consecutiveDocumentIterator.document() );
    assertEquals( Interval.valueOf( 2 ), consecutiveDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( consecutiveDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 3, consecutiveDocumentIterator.nextDocument() );
    assertFalse( consecutiveDocumentIterator.hasNext() );

    i0.reset();
    i1.reset();
    i2.reset();

    consecutiveDocumentIterator = ConsecutiveDocumentIterator.getInstance( new DocumentIterator[] { i0, i1, i2 }, new int[] { 1, 1, 1 } );
    assertTrue( consecutiveDocumentIterator.hasNext() );
    assertEquals( 0, consecutiveDocumentIterator.nextDocument() );
    assertEquals( 0, consecutiveDocumentIterator.document() );
    assertEquals( Interval.valueOf( 0, 2 ), consecutiveDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( consecutiveDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 1, consecutiveDocumentIterator.nextDocument() );
    assertEquals( 1, consecutiveDocumentIterator.document() );
    assertEquals( Interval.valueOf( 0, 5 ), consecutiveDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( consecutiveDocumentIterator.intervalIterator().hasNext() );
    assertEquals( 2, consecutiveDocumentIterator.nextDocument() );
    assertEquals( 2, consecutiveDocumentIterator.document() );
    assertEquals( Interval.valueOf( 0, 2 ), consecutiveDocumentIterator.intervalIterator().nextInterval() );
    assertFalse( consecutiveDocumentIterator.intervalIterator().hasNext() );
   
  }
View Full Code Here

TOP

Related Classes of it.unimi.dsi.mg4j.search.DocumentIterator

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.