static ManagedMultiReader createInstance(IndexManager[] indexManagers, SortConfigurations configuredSorts, Sort sort, boolean indexUninvertingAllowed) throws IOException { final int length = indexManagers.length; IndexReader[] subReaders = new IndexReader[length]; ReaderProvider[] readerProviders = new ReaderProvider[length]; for ( int index = 0; index < length; index++ ) { ReaderProvider indexReaderManager = indexManagers[index].getReaderProvider(); IndexReader openIndexReader = indexReaderManager.openIndexReader(); subReaders[index] = openIndexReader; readerProviders[index] = indexReaderManager; } IndexReader[] effectiveReaders = getEffectiveReaders( indexManagers, subReaders, configuredSorts, sort, indexUninvertingAllowed ); return new ManagedMultiReader( effectiveReaders, subReaders, readerProviders ); }
public static IndexReader openReader(SortConfigurations configuredSorts, Sort sort, IndexManager[] indexManagers, boolean indexUninvertingAllowed) { if ( indexManagers.length == 0 ) { return null; } else { //everything should be the same so wrap in an MultiReader try { return ManagedMultiReader.createInstance( indexManagers, configuredSorts, sort, indexUninvertingAllowed ); } catch (IOException e) { throw log.ioExceptionOnMultiReaderRefresh( e ); } } }
public List<? extends IndexReader> getSubReaders() { return getSequentialSubReaders(); }
Set<String> indexesToBeUninverted = getIndexesToBeUninverted( configuredSorts, sort, indexUninvertingAllowed ); Map<String, Type> mappings = indexesToBeUninverted.isEmpty() ? Collections.<String, Type>emptyMap() : getMappings( sort ); IndexReader[] effectiveReaders = new IndexReader[subReaders.length];
@Test public void testUninvertingReaderIsUsedIfNotAllSortsAreCovered() throws Exception { ExtendedSearchIntegrator integrator = factoryHolder.getSearchFactory(); EntityIndexBinding binding = integrator.getIndexBinding( PERSON_TYPE ); Set<IndexManager> indexManagers = binding.getIndexManagerSelector().forFilters( new FullTextFilterImpl[0] ); Sort sort = new Sort( new SortField( "ageForIntSorting", Type.INT ), new SortField( "ageForStringSorting", Type.STRING ) ); SortConfigurations configuredSorts = new SortConfigurations.Builder() .setIndex( "person" ) .setEntityType( PERSON_TYPE ) .addSortableFields( Arrays.asList( new SortableFieldMetadata.Builder( "ageForStringSorting" ).build() ) ) .build(); IndexManager[] indexManagersArray = indexManagers.toArray( new IndexManager[indexManagers.size()] ); try ( ManagedMultiReader reader = (ManagedMultiReader) MultiReaderFactory.openReader( configuredSorts, sort, indexManagersArray, true ) ) { List<? extends IndexReader> actualReaders = reader.getSubReaders(); assertThat( actualReaders ).hasSize( 1 ); assertThat( actualReaders.get( 0 ).getClass().getSimpleName() ).isEqualTo( "UninvertingDirectoryReader" ); } }
Set<String> indexesToBeUninverted = getIndexesToBeUninverted( configuredSorts, sort, indexUninvertingAllowed ); Map<String, Type> mappings = indexesToBeUninverted.isEmpty() ? Collections.<String, Type>emptyMap() : getMappings( sort ); IndexReader[] effectiveReaders = new IndexReader[subReaders.length];
@Test public void testStandardReaderIsUsedIfAllSortsAreCovered() throws Exception { ExtendedSearchIntegrator integrator = factoryHolder.getSearchFactory(); EntityIndexBinding binding = integrator.getIndexBinding( PERSON_TYPE ); Set<IndexManager> indexManagers = binding.getIndexManagerSelector().forFilters( new FullTextFilterImpl[0] ); Sort sort = new Sort( new SortField( "ageForIntSorting", Type.INT ), new SortField( "ageForStringSorting", Type.STRING ) ); SortConfigurations configuredSorts = new SortConfigurations.Builder() .setIndex( "test" ) .setEntityType( PERSON_TYPE ) .addSortableFields( Arrays.asList( new SortableFieldMetadata.Builder( "ageForIntSorting" ).build(), new SortableFieldMetadata.Builder( "ageForStringSorting" ).build() ) ) .build(); IndexManager[] indexManagersArray = indexManagers.toArray( new IndexManager[indexManagers.size()] ); try ( ManagedMultiReader reader = (ManagedMultiReader) MultiReaderFactory.openReader( configuredSorts, sort, indexManagersArray, false ) ) { List<? extends IndexReader> actualReaders = reader.getSubReaders(); assertThat( actualReaders ).hasSize( 1 ); assertThat( actualReaders.get( 0 ).getClass().getSimpleName() ).isEqualTo( "StandardDirectoryReader" ); } }
static ManagedMultiReader createInstance(IndexManager[] indexManagers, SortConfigurations configuredSorts, Sort sort, boolean indexUninvertingAllowed) throws IOException { final int length = indexManagers.length; IndexReader[] subReaders = new IndexReader[length]; ReaderProvider[] readerProviders = new ReaderProvider[length]; for ( int index = 0; index < length; index++ ) { ReaderProvider indexReaderManager = indexManagers[index].getReaderProvider(); IndexReader openIndexReader = indexReaderManager.openIndexReader(); subReaders[index] = openIndexReader; readerProviders[index] = indexReaderManager; } IndexReader[] effectiveReaders = getEffectiveReaders( indexManagers, subReaders, configuredSorts, sort, indexUninvertingAllowed ); return new ManagedMultiReader( effectiveReaders, subReaders, readerProviders ); }
public static IndexReader openReader(SortConfigurations configuredSorts, Sort sort, IndexManager[] indexManagers, boolean indexUninvertingAllowed) { if ( indexManagers.length == 0 ) { return null; } else { //everything should be the same so wrap in an MultiReader try { return ManagedMultiReader.createInstance( indexManagers, configuredSorts, sort, indexUninvertingAllowed ); } catch (IOException e) { throw log.ioExceptionOnMultiReaderRefresh( e ); } } }
public List<? extends IndexReader> getSubReaders() { return getSequentialSubReaders(); }
indexManagers.toArray( new IndexManager[indexManagers.size()] ), true ) ) { List<? extends IndexReader> actualReaders = reader.getSubReaders(); assertThat( actualReaders ).hasSize( 2 ); assertThat( actualReaders.get( 0 ).getClass().getSimpleName() ).isEqualTo( "UninvertingDirectoryReader" );