/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search;
import java.io.IOException;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.springframework.stereotype.Component;
import com.google.common.base.Predicate;
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
/**
* Created by IntelliJ IDEA.
* User: rmh
* Date: 1/16/12
* Time: 10:06 AM
*/
@Component
public class IndexSettingsBuilderImpl
extends AbstractElasticsearchSettingsBuilder
implements IndexSettingBuilder
{
public Settings buildIndexSettings()
{
final ImmutableSettings.Builder settings = ImmutableSettings.settingsBuilder();
final Map<String, String> indexPropertyMap = getIndexPropertyMap();
populateSettings( settings, indexPropertyMap, ELASTICSEARCH_PROPERTIES_PREFIX );
settings.loadFromSource( buildAnalyserSettings() );
return settings.build();
}
private Map<String, String> getIndexPropertyMap()
{
return configProperties.getSubMap( new Predicate<String>()
{
@Override
public boolean apply( final String input )
{
return StringUtils.startsWith( input, INDEX_PROPERTIES_PREFIX );
}
} );
}
private String buildAnalyserSettings()
{
try
{
return jsonBuilder().startObject().startObject( "analysis" ).startObject( "analyzer" ).startObject(
"whitespace_analyzer" ).field( "type", "custom" ).field( "tokenizer", "whitespace" ).field( "filter", new String[]{
"lowercase"} ).endObject().endObject().endObject().endObject().string();
}
catch ( IOException e )
{
throw new IndexException( "Not able to create analyzer settings for index", e );
}
}
}