/* * Hibernate, Relational Persistence for Idiomatic Java * * Copyright (c) 2010, Red Hat, Inc. and/or its affiliates or third-party contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors. All third-party contributions are * distributed under license by Red Hat, Inc. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.hibernate.search; import java.util.concurrent.Future; import org.hibernate.CacheMode; import org.hibernate.search.batchindexing.MassIndexerProgressMonitor; /** * A MassIndexer is useful to rebuild the indexes from the * data contained in the database. * This process is expensive: all indexed entities and their * indexedEmbedded properties are scrolled from database. * * @author Sanne Grinovero */ public interface MassIndexer { /** * Set the number of threads to be used to load * the root entities. * @param numberOfThreads * @return <tt>this</tt> for method chaining */ MassIndexer threadsToLoadObjects(int numberOfThreads); /** * Sets the batch size used to load the root entities. * @param batchSize * @return <tt>this</tt> for method chaining */ MassIndexer batchSizeToLoadObjects(int batchSize); /** * Sets the number of threads used to load the lazy collections * related to the indexed entities. * @param numberOfThreads * @return <tt>this</tt> for method chaining */ MassIndexer threadsForSubsequentFetching(int numberOfThreads); /** * Deprecated: value is ignored. * To have more threads working on the IndexWriter, use the worker.thread_pool.size * option. */ @Deprecated MassIndexer threadsForIndexWriter(int numberOfThreads); /** * Override the default <code>MassIndexerProgressMonitor</code>. * * @param monitor this instance will receive updates about the massindexing progress. * @return <tt>this</tt> for method chaining */ MassIndexer progressMonitor(MassIndexerProgressMonitor monitor); /** * Sets the cache interaction mode for the data loading tasks. * Defaults to <tt>CacheMode.IGNORE</tt>. * @return <tt>this</tt> for method chaining */ MassIndexer cacheMode(CacheMode cacheMode); /** * If index optimization has to be started at the end * of the indexing process. * Defaults to <tt>true</tt>. * @param optimize * @return <tt>this</tt> for method chaining */ MassIndexer optimizeOnFinish(boolean optimize); /** * If index optimization should be run before starting, * after the purgeAll. Has no effect if <tt>purgeAll</tt> is set to false. * Defaults to <tt>true</tt>. * @param optimize * @return <tt>this</tt> for method chaining */ MassIndexer optimizeAfterPurge(boolean optimize); /** * If all entities should be removed from the index before starting * using purgeAll. Set it to false only if you know there are no * entities in the index: otherwise search results may be duplicated. * Defaults to true. * @param purgeAll * @return <tt>this</tt> for method chaining */ MassIndexer purgeAllOnStart(boolean purgeAll); /** * EXPERIMENTAL method: will probably change * * Will stop indexing after having indexed a set amount of objects. * As a results the index will not be consistent * with the database: use only for testing on an (undefined) subset of database data. * @param maximum * @return <tt>this</tt> for method chaining */ MassIndexer limitIndexedObjectsTo(long maximum); /** * Starts the indexing process in background (asynchronous). * Can be called only once. * @return a Future to control task canceling. * get() will block until completion. * cancel() is currently not implemented. */ Future<?> start(); /** * Starts the indexing process, and then block until it's finished. * Can be called only once. * @throws InterruptedException if the current thread is interrupted * while waiting. */ void startAndWait() throws InterruptedException; /** * Specifies the fetch size to be used when loading primary keys * if objects to be indexed. Some databases accept special values, * for example MySQL might benefit from using {@link Integer#MIN_VALUE} * otherwise it will attempt to preload everything in memory. * @param idFetchSize * @return <tt>this</tt> for method chaining */ public MassIndexer idFetchSize(int idFetchSize); }