Example usage for org.apache.solr.core SolrResourceLoader newInstance

List of usage examples for org.apache.solr.core SolrResourceLoader newInstance

Introduction

In this page you can find the example usage for org.apache.solr.core SolrResourceLoader newInstance.

Prototype

@Override
    public <T> T newInstance(String name, Class<T> expectedType) 

Source Link

Usage

From source file:com.sindicetech.siren.solr.schema.SirenDatatypeAnalyzerConfig.java

License:Open Source License

/**
 * Read the definition of the datatypes and load them into the
 * {@code datatypes} map.//from  ww  w . j  a  v a 2s.c  o m
 */
private void readConfig(final InputSource is) {
    log.info("Reading configuration of SIREn's datatype analyzer");

    try {
        // pass the config resource loader to avoid building an empty one for no reason:
        // in the current case though, the stream is valid so we wont load the resource by name
        final Config schemaConf = new Config(loader, "datatypeConfig", is, "/datatypeConfig/");
        final Document document = schemaConf.getDocument();
        final XPath xpath = schemaConf.getXPath();
        final Node nd = (Node) xpath.evaluate("/datatypeConfig/@name", document, XPathConstants.NODE);
        if (nd == null) {
            log.warn("datatypeConfig has no name!");
        } else {
            name = nd.getNodeValue();
            log.info("datatypeConfig name=" + name);
        }

        version = schemaConf.get("/datatypeConfig/@version");

        final AbstractPluginLoader<Datatype> datatypeLoader = new AbstractPluginLoader<Datatype>(
                "[datatypeConfig] datatype", Datatype.class, true, true) {

            @Override
            protected Datatype create(final SolrResourceLoader loader, final String name,
                    final String className, final Node node) throws Exception {
                final Datatype dt = loader.newInstance(className, Datatype.class);
                dt.setDatatypeName(name);

                // An analyzer with type="index"
                String expression = "./analyzer[@type='index']";
                Node anode = (Node) xpath.evaluate(expression, node, XPathConstants.NODE);
                final Analyzer analyzer = AnalyzerConfigReader.readAnalyzer(anode, loader, luceneMatchVersion);
                if (analyzer != null)
                    dt.setAnalyzer(analyzer);

                expression = "./analyzer[@type='query']";
                anode = (Node) xpath.evaluate(expression, node, XPathConstants.NODE);
                final Analyzer queryAnalyzer = AnalyzerConfigReader.readAnalyzer(anode, loader,
                        luceneMatchVersion);
                if (queryAnalyzer != null)
                    dt.setQueryAnalyzer(queryAnalyzer);

                return dt;
            }

            @Override
            protected void init(final Datatype plugin, final Node node) throws Exception {
                final Map<String, String> params = DOMUtil.toMapExcept(node.getAttributes(), "name", "class");
                plugin.setArgs(params);
            }

            @Override
            protected Datatype register(final String name, final Datatype plugin) throws Exception {
                log.trace("datatype defined: " + plugin);
                return datatypes.put(name, plugin);
            }
        };

        final String expression = "/datatypeConfig/datatype";
        final NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET);
        datatypeLoader.load(loader, nodes);
    } catch (final SolrException e) {
        throw e;
    } catch (final Exception e) {
        // unexpected exception...
        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
                "Datatype configuration parsing failed: " + e.getMessage(), e);
    }
}

From source file:edu.upenn.library.solrplugins.CaseInsensitiveSortingTextField.java

License:Apache License

@Override
protected void init(IndexSchema schema, Map<String, String> args) {
    SolrResourceLoader loader = schema.getResourceLoader();
    if (args.containsKey(SERIALIZER_ARGNAME)) {
        serializer = loader.newInstance(args.remove(SERIALIZER_ARGNAME), TextTransformer.class);
    }/*from   ww w. j a v a 2s. c  o  m*/
    if (args.containsKey(DISPLAYIZER_ARGNAME)) {
        displayizer = loader.newInstance(args.remove(DISPLAYIZER_ARGNAME), TextTransformer.class);
    }
    if (args.containsKey(PAYLOAD_HANDLER_ARGNAME)) {
        payloadHandler = loader.newInstance(args.remove(PAYLOAD_HANDLER_ARGNAME), FacetPayload.class);
    } else {
        payloadHandler = new DefaultPayloadHandler();
    }
    if (args.containsKey(HIERARCHY_LEVEL_ARGNAME)) {
        hierarchyLevel = loader.newInstance(args.remove(HIERARCHY_LEVEL_ARGNAME), Integer.class);
    }
    delim = initDelim(hierarchyLevel);
    delimBytes = delim.getBytes(StandardCharsets.UTF_8);
    super.init(schema, args);
}

From source file:org.dice.solrenhancements.spellchecker.DiceSpellCheckComponent.java

License:Apache License

@Override
public void inform(SolrCore core) {
    if (initParams != null) {
        LOG.info("Initializing spell checkers");
        boolean hasDefault = false;
        for (int i = 0; i < initParams.size(); i++) {
            if (initParams.getName(i).equals("spellchecker")) {
                NamedList spellchecker = (NamedList) initParams.getVal(i);
                String className = (String) spellchecker.get("classname");
                // TODO: this is a little bit sneaky: warn if class isnt supplied
                // so that its mandatory in a future release?
                if (className == null)
                    className = IndexBasedSpellChecker.class.getName();
                SolrResourceLoader loader = core.getResourceLoader();
                SolrSpellChecker checker = loader.newInstance(className, SolrSpellChecker.class);
                if (checker != null) {
                    String dictionary = checker.init(spellchecker, core);
                    if (dictionary != null) {
                        boolean isDefault = dictionary.equals(SolrSpellChecker.DEFAULT_DICTIONARY_NAME);
                        if (isDefault == true && hasDefault == false) {
                            hasDefault = true;
                        } else if (isDefault == true && hasDefault == true) {
                            throw new RuntimeException("More than one dictionary is missing name.");
                        }//  w  w w.  j av a2 s . c om
                        spellCheckers.put(dictionary, checker);
                    } else {
                        if (hasDefault == false) {
                            spellCheckers.put(SolrSpellChecker.DEFAULT_DICTIONARY_NAME, checker);
                            hasDefault = true;
                        } else {
                            throw new RuntimeException("More than one dictionary is missing name.");
                        }
                    }
                    // Register event listeners for this SpellChecker
                    core.registerFirstSearcherListener(new SpellCheckerListener(core, checker, false, false));
                    boolean buildOnCommit = Boolean.parseBoolean((String) spellchecker.get("buildOnCommit"));
                    boolean buildOnOptimize = Boolean
                            .parseBoolean((String) spellchecker.get("buildOnOptimize"));
                    if (buildOnCommit || buildOnOptimize) {
                        LOG.info("Registering newSearcher listener for spellchecker: "
                                + checker.getDictionaryName());
                        core.registerNewSearcherListener(
                                new SpellCheckerListener(core, checker, buildOnCommit, buildOnOptimize));
                    }
                } else {
                    throw new RuntimeException("Can't load spell checker: " + className);
                }
            }
        }

        Map<String, QueryConverter> queryConverters = new HashMap<String, QueryConverter>();
        core.initPlugins(queryConverters, QueryConverter.class);

        //ensure that there is at least one query converter defined
        if (queryConverters.size() == 0) {
            LOG.info("No queryConverter defined, using default converter");
            queryConverters.put("queryConverter", new SpellingQueryConverter());
        }

        //there should only be one
        if (queryConverters.size() == 1) {
            queryConverter = queryConverters.values().iterator().next();
            IndexSchema schema = core.getLatestSchema();
            String fieldTypeName = (String) initParams.get("queryAnalyzerFieldType");
            FieldType fieldType = schema.getFieldTypes().get(fieldTypeName);
            Analyzer analyzer = fieldType == null
                    ? new WhitespaceAnalyzer(core.getSolrConfig().luceneMatchVersion)
                    : fieldType.getQueryAnalyzer();
            //TODO: There's got to be a better way!  Where's Spring when you need it?
            queryConverter.setAnalyzer(analyzer);
        }
    }
}