private void performShardAwareOperation(IndexedTypeSet entityTypes, BiConsumer<IndexManager, IndexedTypeIdentifier> operation) { for (IndexedTypeIdentifier type : entityTypes) { EntityIndexBinding indexBindingForEntity = integrator.getIndexBinding(type); if (indexBindingForEntity != null) { Set<IndexManager> indexManagers = indexBindingForEntity.getIndexManagerSelector().forExisting(type, null, null); indexManagers.forEach(im -> operation.accept(im, type)); } } } }
private static void collectAllIndexManagersInto(EntityIndexBinding bindings, HashMap<String, IndexManager> indexManagers) { for ( IndexManager im : bindings.getIndexManagerSelector().all() ) { indexManagers.put( im.getIndexName(), im ); } }
protected Set<IndexManager> getIndexManagers(EntityIndexBinding binding) { FullTextFilterImplementor[] fullTextFilters = getFullTextFilterImplementors(); Set<IndexManager> indexManagers = binding.getIndexManagerSelector().forFilters( fullTextFilters ); return indexManagers; }
private void appendWork(WorkQueuePerIndexSplitter context, LuceneWork work) { final IndexedTypeIdentifier entityType = work.getEntityType(); EntityIndexBinding entityIndexBinding = bindingLookup.apply( entityType ); IndexManagerSelector selector = entityIndexBinding.getIndexManagerSelector(); TransactionalOperationExecutor executor = work.acceptIndexWorkVisitor( TransactionalOperationExecutorSelector.INSTANCE, null ); executor.performOperation( work, selector, context ); }
@Override public void optimize(IndexedTypeIdentifier entityType) { EntityIndexBinding entityIndexBinding = getSafeIndexBindingForEntity( entityType ); for ( IndexManager im : entityIndexBinding.getIndexManagerSelector().all() ) { im.optimize(); } }
public static void flush(SearchIntegrator si, IndexedTypeIdentifier typeId) { for ( IndexManager indexManager : si.getIndexBinding( typeId ).getIndexManagerSelector().all() ) { indexManager.performStreamOperation( new FlushLuceneWork( null, typeId ), null, false ); } }
private void executeWork(LuceneWork work, IndexingMonitor progressMonitor) { final IndexedTypeIdentifier entityType = work.getEntityType(); EntityIndexBinding entityIndexBinding = integrator.getIndexBinding( entityType ); IndexManagerSelector selector = entityIndexBinding.getIndexManagerSelector(); StreamingOperationExecutor executor = work.acceptIndexWorkVisitor( StreamingOperationExecutorSelector.INSTANCE, null ); executor.performStreamOperation( work, selector, progressMonitor, forceAsync ); }
public IndexManager extractIndexManager(IndexedTypeIdentifier indexedType) { EntityIndexBinding indexBindingForEntity = getSearchFactory().getIndexBindings().get( indexedType ); IndexManager indexManager = (IndexManager) indexBindingForEntity.getIndexManagerSelector().all().iterator().next(); return indexManager; }
/** * Perform a flush, which implies a refresh */ private void flush() { IndexManager indexManager = getExtendedSearchIntegrator().getIndexBindings().get( Level1.class ) .getIndexManagerSelector().all().iterator().next(); indexManager.performOperations( Collections.singletonList( FlushLuceneWork.INSTANCE ), null ); }
public Directory getDirectory(IndexedTypeIdentifier entityType) { ExtendedSearchIntegrator integrator = resourceManager.getExtendedSearchIntegrator(); Set<IndexManager> indexManagers = integrator.getIndexBinding( entityType ).getIndexManagerSelector().all(); DirectoryBasedIndexManager indexManager = (DirectoryBasedIndexManager) indexManagers.iterator().next(); return indexManager.getDirectoryProvider().getDirectory(); }
@Test public void testSettingIdHashShardingStrategyWithoutNumberOfShards() { Map<String, String> shardingProperties = new HashMap<String, String>(); shardingProperties.put( "hibernate.search.default.sharding_strategy", IdHashShardingStrategy.class.getName() ); logged.expectMessage( "HSEARCH000193", "IdHashShardingStrategy" ); EntityIndexBinding entityIndexBinding = getSearchFactory( shardingProperties ).getIndexBindings().get( Foo.class ); // 1 is assumed for legacy reasons. IMO not setting the number of shards should throw an exception assertTrue( "Without specifying number of shards, 1 should be assumed", entityIndexBinding.getIndexManagerSelector().all().size() == 1 ); }
protected static AbstractWorkspaceImpl extractWorkspace(MutableSearchFactory sf, Class<?> type) { EntityIndexBinding indexBindingForEntity = sf.getIndexBindings().get( type ); DirectoryBasedIndexManager indexManager = (DirectoryBasedIndexManager) indexBindingForEntity.getIndexManagerSelector().all().iterator().next(); WorkspaceHolder backend = (WorkspaceHolder) indexManager.getWorkspaceHolder(); return backend.getIndexResources().getWorkspace(); }
private void assertEfficientIndexingUsed(SearchIntegrator searchIntegrator, Class<?> clazz) { DirectoryBasedIndexManager im = (DirectoryBasedIndexManager) searchIntegrator.getIndexBindings().get(clazz) .getIndexManagerSelector().all().iterator().next(); WorkspaceHolder workspaceHolder = im.getWorkspaceHolder(); LuceneBackendResources indexResources = workspaceHolder.getIndexResources(); IndexWorkVisitor<Void, LuceneWorkExecutor> visitor = indexResources.getWorkVisitor(); assertTrue(TestingUtil.extractField(visitor, "updateExecutor") instanceof ByTermUpdateWorkExecutor); } }
private int countDomainsByFullText(String name) throws IOException { String indexName = getExtendedSearchIntegrator().getIndexBindings().get( Domain.class ) .getIndexManagerSelector().all().iterator().next().getIndexName(); return getNumberOfDocumentsInIndexByQuery( indexName, "name", name ); }
@Test(dependsOnMethods="simpleIndexTest") //depends as otherwise the Person index is not initialized yet public void testPropertiesWhereRead() { SearchIntegrator searchFactory = TestQueryHelperFactory.extractSearchFactory(cache); EntityIndexBinding indexBindingForEntity = searchFactory.getIndexBindings().get(Person.class); Set<IndexManager> managers = indexBindingForEntity.getIndexManagerSelector().all(); assertEquals(1, managers.size()); IndexManager manager = managers.iterator().next(); assertNotNull(manager); assertTrue(manager instanceof DirectoryBasedIndexManager); DirectoryBasedIndexManager dbim = (DirectoryBasedIndexManager) manager; assertTrue(dbim.getDirectoryProvider() instanceof RAMDirectoryProvider); }
private void purgeAll(Class<?> entityType, String tenantId) throws IOException { FullTextSession session = Search.getFullTextSession( openSessionWithTenantId( tenantId ) ); session.purgeAll( entityType ); session.flushToIndexes(); session.close(); String indexName = getExtendedSearchIntegrator().getIndexBindings().get( entityType ) .getIndexManagerSelector().all().iterator().next().getIndexName(); assertThat( getNumberOfDocumentsInIndexByQuery( indexName, DocumentBuilderIndexedEntity.TENANT_ID_FIELDNAME, tenantId ) ).isEqualTo( 0 ); }
private void verifyIndexIsLocked(boolean isLocked, Class type) throws IOException { SearchIntegrator searchIntegrator = builder.getSearchFactory().unwrap( SearchIntegrator.class ); IndexManager indexManager = searchIntegrator.getIndexBindings().get( type ) .getIndexManagerSelector().all().iterator().next(); // No need to check for alternative implementations such as ES if ( indexManager instanceof DirectoryBasedIndexManager ) { Directory directory = ( (DirectoryBasedIndexManager) indexManager ).getDirectoryProvider().getDirectory(); Assert.assertEquals( isLocked, LuceneBackendTestHelpers.isLocked( directory ) ); } }
private void rebuildIndexWithMassIndexer(Class<?> entityType, String tenantId) throws Exception { FullTextSession session = Search.getFullTextSession( openSessionWithTenantId( tenantId ) ); session.createIndexer( entityType ).purgeAllOnStart( true ).startAndWait(); session.close(); String indexName = getExtendedSearchIntegrator().getIndexBindings().get( entityType ) .getIndexManagerSelector().all().iterator().next().getIndexName(); assertThat( getNumberOfDocumentsInIndexByQuery( indexName, DocumentBuilderIndexedEntity.TENANT_ID_FIELDNAME, tenantId ) ).isGreaterThan( 0 ); }
protected void awaitProcessingCompletion() { for ( Class<?> clazz : getAnnotatedClasses() ) { IndexedTypeIdentifier typeId = PojoIndexedTypeIdentifier.convertFromLegacy( clazz ); for ( IndexManager indexManager : getExtendedSearchIntegrator().getIndexBinding( typeId ).getIndexManagerSelector().all() ) { indexManager.awaitAsyncProcessingCompletion(); } } }
@Test public void testUnlockIndexWriter() throws Exception { ExtendedSearchIntegrator searchIntegrator = sfh.getSearchFactory(); IndexManager indexManager = searchIntegrator.getIndexBindings().get( Entity.class ) .getIndexManagerSelector().all().iterator().next(); helper.add( new Entity(), 1 ); assertTrue( isIndexWriterLocked( indexManager ) ); indexManager.flushAndReleaseResources(); assertFalse( isIndexWriterLocked( indexManager ) ); helper.add( new Entity(), 2 ); assertTrue( isIndexWriterLocked( indexManager ) ); }