package org.apache.lucene.queryparser.flexible.aqp.config;
import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.queryparser.flexible.core.config.ConfigurationKey;
import org.apache.lucene.queryparser.flexible.standard.config.FieldBoostMapFCListener;
import org.apache.lucene.queryparser.flexible.standard.config.FieldDateResolutionFCListener;
import org.apache.lucene.queryparser.flexible.standard.config.StandardQueryConfigHandler;
import org.apache.lucene.queryparser.flexible.aqp.AqpAdsabsNodeProcessorPipeline;
import org.apache.lucene.queryparser.flexible.aqp.AqpAdsabsQueryTreeBuilder;
import org.apache.lucene.queryparser.flexible.aqp.parser.AqpStandardQueryConfigHandler;
import org.apache.solr.search.AqpAdsabsQParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This is the CONFIGURATION for the ADS grammar (the zero phase: instantiation)
*
* It is usually called from AdsQParserPlugin. This class contains the
* sensitive default. However, some parameters can be overriden using url
* params - that happens inside: {@link AqpAdsabsQParser}
*
* @see AqpAdsabsNodeProcessorPipeline
* @see AqpAdsabsQueryConfigHandler
* @see AqpAdsabsQueryTreeBuilder
* @see AqpAdsabsQParser
*
*/
public class AqpAdsabsQueryConfigHandler extends AqpStandardQueryConfigHandler {
public static final Logger log = LoggerFactory
.getLogger(AqpAdsabsQueryConfigHandler.class);
final public static class ConfigurationKeys {
/**
* Here one can store AqpRequest object
*/
final public static ConfigurationKey<AqpRequestParams> SOLR_REQUEST = ConfigurationKey.newInstance();
final public static ConfigurationKey<AqpFunctionQueryBuilderConfig> FUNCTION_QUERY_BUILDER_CONFIG = ConfigurationKey.newInstance();
final public static ConfigurationKey<String> DEFAULT_DATE_RANGE_FIELD = ConfigurationKey.newInstance();
final public static ConfigurationKey<String> DEFAULT_IDENTIFIER_FIELD = ConfigurationKey.newInstance();
final public static ConfigurationKey<Logger> SOLR_LOGGER = ConfigurationKey.newInstance();
final public static ConfigurationKey<Boolean> SOLR_READY = ConfigurationKey.newInstance();
final public static ConfigurationKey<Map<String, int[]>> AUTHOR_FIELDS = ConfigurationKey.newInstance();
final public static ConfigurationKey<String> UNFIELDED_SEARCH_FIELD = ConfigurationKey.newInstance();
final public static ConfigurationKey<String> DUMMY_VALUE = ConfigurationKey.newInstance();
final public static ConfigurationKey<Map<String,Map<String, Float>>> VIRTUAL_FIELDS = ConfigurationKey.newInstance();
}
public AqpAdsabsQueryConfigHandler() {
super();
// Add listener that will build the FieldConfig attributes.
addFieldConfigListener(new FieldBoostMapFCListener(this));
addFieldConfigListener(new FieldDateResolutionFCListener(this));
// Default Values
set(ConfigurationKeys.SOLR_REQUEST, new AqpRequestParamsImpl());
set(ConfigurationKeys.SOLR_LOGGER, log);
set(ConfigurationKeys.FUNCTION_QUERY_BUILDER_CONFIG, new AqpFunctionQueryBuilderConfigImpl());
get(AqpStandardQueryConfigHandler.ConfigurationKeys.FEEDBACK).registerEventHandler(new AqpAdsabsLoggingHandler());
set(ConfigurationKeys.DEFAULT_DATE_RANGE_FIELD, "date");
set(ConfigurationKeys.DEFAULT_IDENTIFIER_FIELD, "identifier");
set(StandardQueryConfigHandler.ConfigurationKeys.ALLOW_LEADING_WILDCARD, true);
set(AqpStandardQueryConfigHandler.ConfigurationKeys.ALLOW_SLOW_FUZZY, true);
set(AqpStandardQueryConfigHandler.ConfigurationKeys.IMPLICIT_FUZZY, 2.0f);
// Now inside the solrconfig.xml
//Map<String, String> fieldMap = get(AqpStandardQueryConfigHandler.ConfigurationKeys.FIELD_MAPPER);
//fieldMap.put("arxiv", "identifier");
/*
* Warning: some of these values can be set also inside solrconfig.xml
* Check the ads-config section (applies to solr QParsers only)
*/
set(StandardQueryConfigHandler.ConfigurationKeys.DEFAULT_OPERATOR, Operator.AND);
set(AqpAdsabsQueryConfigHandler.ConfigurationKeys.SOLR_READY, true);
set(AqpAdsabsQueryConfigHandler.ConfigurationKeys.AUTHOR_FIELDS, new HashMap<String, int[]>());
set(AqpAdsabsQueryConfigHandler.ConfigurationKeys.UNFIELDED_SEARCH_FIELD, "#$@&@unfielded");
set(AqpAdsabsQueryConfigHandler.ConfigurationKeys.DUMMY_VALUE, "dummynonexxistingnullvalue");
// This is not being initialized inside the standard config handler, which causes
// errors (even if the functionality is not used, wtf...)
set(StandardQueryConfigHandler.ConfigurationKeys.MULTI_FIELDS, new CharSequence[0]);
set(AqpAdsabsQueryConfigHandler.ConfigurationKeys.VIRTUAL_FIELDS, new HashMap<String, Map<String, Float>>());
}
}