Skip to content

Commit

Permalink
HSEARCH-3776 Expose configuration property keys for index writer conf…
Browse files Browse the repository at this point in the history
…ig as constants in LuceneIndexSettings
  • Loading branch information
yrodiere committed Apr 20, 2020
1 parent f846cac commit b1085be
Show file tree
Hide file tree
Showing 3 changed files with 164 additions and 11 deletions.
Expand Up @@ -6,8 +6,13 @@
*/
package org.hibernate.search.backend.lucene.cfg;

import org.hibernate.search.backend.lucene.logging.impl.LuceneLogCategories;
import org.hibernate.search.backend.lucene.lowlevel.index.IOStrategyName;

import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.LogByteSizeMergePolicy;
import org.apache.lucene.util.InfoStream;

/**
* Configuration properties for Lucene indexes.
* <p>
Expand Down Expand Up @@ -86,6 +91,121 @@ private LuceneIndexSettings() {
*/
public static final String IO_REFRESH_INTERVAL = IO_PREFIX + IORadicals.REFRESH_INTERVAL;

/**
* The prefix for property keys related to the index writer.
*/
public static final String WRITER_PREFIX = "writer.";

/**
* The value to pass to {@link IndexWriterConfig#setMaxBufferedDocs(int)}.
* <p>
* Expects a positive Integer value,
* or a String that can be parsed into such Integer value.
* <p>
* The default for this setting is defined by Lucene.
*
* @see IndexWriterConfig#setMaxBufferedDocs(int)
*/
public static final String WRITER_MAX_BUFFERED_DOCS = WRITER_PREFIX + WriterRadicals.MAX_BUFFERED_DOCS;

/**
* The value to pass to {@link IndexWriterConfig#setRAMBufferSizeMB(double)}.
* <p>
* Expects a positive Integer value in megabytes,
* or a String that can be parsed into such Integer value.
* <p>
* The default for this setting is defined by Lucene.
*
* @see IndexWriterConfig#setRAMBufferSizeMB(double)
*/
public static final String WRITER_RAM_BUFFER_SIZE = WRITER_PREFIX + WriterRadicals.RAM_BUFFER_SIZE;

/**
* Whether to log the {@link IndexWriterConfig#setInfoStream(InfoStream)} (at the trace level) or not.
* <p>
* Logs are appended to the logger {@value LuceneLogCategories#INFOSTREAM_LOGGER_CATEGORY_NAME}.
* <p>
* Expects a Boolean value such as {@code true} or {@code false},
* or a String that can be parsed into such Boolean value.
* <p>
* Default is {@code false}.
*
* @see IndexWriterConfig#setInfoStream(InfoStream)
*/
public static final String WRITER_INFOSTREAM = WRITER_PREFIX + WriterRadicals.INFOSTREAM;

/**
* The value to pass to {@link LogByteSizeMergePolicy#setMaxMergeDocs(int)}.
* <p>
* Expects a positive Integer value,
* or a String that can be parsed into such Integer value.
* <p>
* The default for this setting is defined by Lucene.
*
* @see LogByteSizeMergePolicy#setMaxMergeDocs(int)
*/
public static final String WRITER_MAX_MERGE_DOCS = WRITER_PREFIX + WriterRadicals.MAX_MERGE_DOCS;

/**
* The value to pass to {@link LogByteSizeMergePolicy#setMergeFactor(int)}.
* <p>
* Expects a positive Integer value,
* or a String that can be parsed into such Integer value.
* <p>
* The default for this setting is defined by Lucene.
*
* @see LogByteSizeMergePolicy#setMergeFactor(int)
*/
public static final String WRITER_MERGE_FACTOR = WRITER_PREFIX + WriterRadicals.MERGE_FACTOR;

/**
* The value to pass to {@link LogByteSizeMergePolicy#setMinMergeMB(double)}.
* <p>
* Expects a positive Integer value in megabytes,
* or a String that can be parsed into such Integer value.
* <p>
* The default for this setting is defined by Lucene.
*
* @see LogByteSizeMergePolicy#setMinMergeMB(double)
*/
public static final String WRITER_MERGE_MIN_SIZE = WRITER_PREFIX + WriterRadicals.MERGE_MIN_SIZE;

/**
* The value to pass to {@link LogByteSizeMergePolicy#setMaxMergeMB(double)}.
* <p>
* Expects a positive Integer value in megabytes,
* or a String that can be parsed into such Integer value.
* <p>
* The default for this setting is defined by Lucene.
*
* @see LogByteSizeMergePolicy#setMaxMergeMB(double)
*/
public static final String WRITER_MERGE_MAX_SIZE = WRITER_PREFIX + WriterRadicals.MERGE_MAX_SIZE;

/**
* The value to pass to {@link LogByteSizeMergePolicy#setMaxMergeMBForForcedMerge(double)}.
* <p>
* Expects a positive Integer value in megabytes,
* or a String that can be parsed into such Integer value.
* <p>
* The default for this setting is defined by Lucene.
*
* @see LogByteSizeMergePolicy#setMaxMergeMBForForcedMerge(double)
*/
public static final String WRITER_MERGE_MAX_OPTIMIZE_SIZE = WRITER_PREFIX + WriterRadicals.MERGE_MAX_OPTIMIZE_SIZE;

/**
* The value to pass to {@link LogByteSizeMergePolicy#setCalibrateSizeByDeletes(boolean)}.
* <p>
* Expects a Boolean value such as {@code true} or {@code false},
* or a String that can be parsed into such Boolean value.
* <p>
* The default for this setting is defined by Lucene.
*
* @see LogByteSizeMergePolicy#setCalibrateSizeByDeletes(boolean)
*/
public static final String WRITER_MERGE_CALIBRATE_BY_DELETES = WRITER_PREFIX + WriterRadicals.MERGE_CALIBRATE_BY_DELETES;

/**
* The prefix for sharding-related property keys.
*/
Expand Down Expand Up @@ -171,6 +291,26 @@ private IORadicals() {
public static final String REFRESH_INTERVAL = "refresh_interval";
}

/**
* Configuration property keys for index writer options, without the {@link #WRITER_PREFIX prefix}.
*/
public static final class WriterRadicals {

private WriterRadicals() {
}

public static final String MAX_BUFFERED_DOCS = "max_buffered_docs";
public static final String RAM_BUFFER_SIZE = "ram_buffer_size";
public static final String INFOSTREAM = "infostream";

public static final String MAX_MERGE_DOCS = "max_merge_docs";
public static final String MERGE_FACTOR = "merge_factor";
public static final String MERGE_MIN_SIZE = "merge_min_size";
public static final String MERGE_MAX_SIZE = "merge_max_size";
public static final String MERGE_MAX_OPTIMIZE_SIZE = "merge_max_optimize_size";
public static final String MERGE_CALIBRATE_BY_DELETES = "merge_calibrate_by_deletes";
}

/**
* Configuration property keys for sharding, without the {@link #SHARDING_PREFIX prefix}.
*/
Expand Down
Expand Up @@ -6,7 +6,6 @@
*/
package org.hibernate.search.backend.lucene.logging.impl;

import org.hibernate.search.backend.lucene.lowlevel.writer.impl.IndexWriterSettings;
import org.hibernate.search.util.common.logging.impl.LogCategory;
import org.hibernate.search.util.common.logging.impl.LoggerFactory;

Expand All @@ -20,13 +19,17 @@ public final class LuceneLogCategories {
private LuceneLogCategories() {
}

public static final String INFOSTREAM_LOGGER_CATEGORY_NAME = "org.hibernate.search.backend.lucene.infostream";

/**
* This is the category of the Logger used to print out the Lucene infostream.
* <p>
* To enable the logger, the category needs to be enabled at TRACE level and configuration
* property {@code org.hibernate.search.backend.configuration.impl.IndexWriterSetting#INFOSTREAM}
* needs to be enabled on the index.
*
* @see org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings#WRITER_INFOSTREAM
*/
public static final LogCategory INFOSTREAM_LOGGER_CATEGORY = new LogCategory( "org.hibernate.search.backend.lucene.infostream" );
public static final LogCategory INFOSTREAM_LOGGER_CATEGORY = new LogCategory( INFOSTREAM_LOGGER_CATEGORY_NAME );

}
Expand Up @@ -6,6 +6,16 @@
*/
package org.hibernate.search.backend.lucene.lowlevel.writer.impl;

import static org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings.WriterRadicals.INFOSTREAM;
import static org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings.WriterRadicals.MAX_BUFFERED_DOCS;
import static org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings.WriterRadicals.MAX_MERGE_DOCS;
import static org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings.WriterRadicals.MERGE_CALIBRATE_BY_DELETES;
import static org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings.WriterRadicals.MERGE_FACTOR;
import static org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings.WriterRadicals.MERGE_MAX_OPTIMIZE_SIZE;
import static org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings.WriterRadicals.MERGE_MAX_SIZE;
import static org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings.WriterRadicals.MERGE_MIN_SIZE;
import static org.hibernate.search.backend.lucene.cfg.LuceneIndexSettings.WriterRadicals.RAM_BUFFER_SIZE;

import java.io.Serializable;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
Expand Down Expand Up @@ -49,18 +59,18 @@ public static List<IndexWriterSettingValue<?>> extractAll(ConfigurationPropertyS
private static final List<Extractor<?, ?>> EXTRACTORS = new ArrayList<>();

static {
registerIntegerWriterSetting( "max_buffered_docs", IndexWriterConfig::setMaxBufferedDocs );
registerIntegerWriterSetting( "ram_buffer_size", IndexWriterConfig::setRAMBufferSizeMB );
registerIntegerWriterSetting( MAX_BUFFERED_DOCS, IndexWriterConfig::setMaxBufferedDocs );
registerIntegerWriterSetting( RAM_BUFFER_SIZE, IndexWriterConfig::setRAMBufferSizeMB );

registerSetting( Extractor.fromBoolean( "infostream", enabled -> enabled ? new LoggerInfoStream() : null,
registerSetting( Extractor.fromBoolean( INFOSTREAM, enabled -> enabled ? new LoggerInfoStream() : null,
IndexWriterConfig::setInfoStream, (logByteSizeMergePolicy, integer) -> { } ) );

registerIntegerMergePolicySetting( "max_merge_docs", LogByteSizeMergePolicy::setMaxMergeDocs );
registerIntegerMergePolicySetting( "merge_factor", LogByteSizeMergePolicy::setMergeFactor );
registerIntegerMergePolicySetting( "merge_min_size", LogByteSizeMergePolicy::setMinMergeMB );
registerIntegerMergePolicySetting( "merge_max_size", LogByteSizeMergePolicy::setMaxMergeMB );
registerIntegerMergePolicySetting( "merge_max_optimize_size", LogByteSizeMergePolicy::setMaxMergeMBForForcedMerge );
registerBooleanMergePolicySetting( "merge_calibrate_by_deletes", LogByteSizeMergePolicy::setCalibrateSizeByDeletes );
registerIntegerMergePolicySetting( MAX_MERGE_DOCS, LogByteSizeMergePolicy::setMaxMergeDocs );
registerIntegerMergePolicySetting( MERGE_FACTOR, LogByteSizeMergePolicy::setMergeFactor );
registerIntegerMergePolicySetting( MERGE_MIN_SIZE, LogByteSizeMergePolicy::setMinMergeMB );
registerIntegerMergePolicySetting( MERGE_MAX_SIZE, LogByteSizeMergePolicy::setMaxMergeMB );
registerIntegerMergePolicySetting( MERGE_MAX_OPTIMIZE_SIZE, LogByteSizeMergePolicy::setMaxMergeMBForForcedMerge );
registerBooleanMergePolicySetting( MERGE_CALIBRATE_BY_DELETES, LogByteSizeMergePolicy::setCalibrateSizeByDeletes );
}

private static void registerIntegerWriterSetting(String propertyKey,
Expand Down

0 comments on commit b1085be

Please sign in to comment.