List of usage examples for org.apache.solr.core SolrResourceLoader newInstance
@Override
public <T> T newInstance(String name, Class<T> expectedType)
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); } } }