/* * 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.store.optimization; import java.util.Properties; import org.apache.lucene.index.IndexWriter; import org.hibernate.search.SearchException; import org.hibernate.search.SearchFactory; import org.hibernate.search.indexes.spi.IndexManager; import org.hibernate.search.store.Workspace; /** * Controls how and when the indexes are optimized. * Implementations need to be threadsafe. * * @author Emmanuel Bernard * @author Sanne Grinovero */ public interface OptimizerStrategy { /** * Invokes optimize on the IndexWriter; This is invoked when * an optimization has been explicitly requested by the user API * using {@link SearchFactory#optimize()} or {@link SearchFactory#optimize(Class)}, * or at the start or end of a MassIndexer's work. * * @param writer the index writer * @return {@code true} if optimisation occurred, {@code false} otherwise * @throws SearchException in case of IO errors on the index */ boolean performOptimization(IndexWriter writer); /** * To count the amount of operations which where applied to the index. * Invoked once per transaction. * * @param increment operation count */ void addOperationWithinTransactionCount(long increment); /** * Allows the implementation to start an optimization process. * The decision of optimizing or not is up to the implementor. * This is invoked after all changes of a transaction are applied, * but never during stream operation such as those used by * the MassIndexer. * * @param workspace the current work space */ void optimize(Workspace workspace); /** * Initializes the {@code OptimizerStrategy}. Is called once at the initialisation of the strategy. * * @param indexManager the index manager for which this strategy applies * @param indexProperties the configuration properties */ void initialize(IndexManager indexManager, Properties indexProperties); }