@Override public QParser createParser(String qStr, SolrParams localParams, SolrParams params, SolrQueryRequest req) { answerTypeMap = new HashMap<String, String>();//<co id="qqpp.atm"/> answerTypeMap.put("L", "NE_LOCATION"); answerTypeMap.put("T", "NE_TIME|NE_DATE"); answerTypeMap.put("P", "NE_PERSON"); answerTypeMap.put("O", "NE_ORGANIZATION"); QParser qParser; if (params.getBool(QAParams.COMPONENT_NAME, false) == true //<co id="qqpp.explainif"/> && qStr.equals("*:*") == false) { AnswerTypeClassifier atc = new AnswerTypeClassifier(model, probs, atcg);//<co id="qqpp.atc"/> Parser parser = new ChunkParser(chunker, tagger);//<co id="qqpp.parser"/> qParser = new QuestionQParser(qStr, localParams, //<co id="qqpp.construct"/> params, req, parser, atc, answerTypeMap); } else { //just do a regular query if qa is turned off qParser = req.getCore().getQueryPlugin("edismax") .createParser(qStr, localParams, params, req); } return qParser; } /*
/** Configure the query parsers. */ private void initQParsers() { initPlugins(qParserPlugins,QParserPlugin.class); // default parsers for (int i=0; i<QParserPlugin.standardPlugins.length; i+=2) { try { String name = (String)QParserPlugin.standardPlugins[i]; if (null == qParserPlugins.get(name)) { Class<QParserPlugin> clazz = (Class<QParserPlugin>)QParserPlugin.standardPlugins[i+1]; QParserPlugin plugin = clazz.newInstance(); qParserPlugins.put(name, plugin); plugin.init(null); } } catch (Exception e) { throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e); } } }
/** Create a <code>QParser</code> to parse <code>qstr</code>, * assuming that the default query type is <code>defaultType</code>. * The query type may be overridden by local parameters in the query * string itself. For example if defaultType=<code>"dismax"</code> * and qstr=<code>foo</code>, then the dismax query parser will be used * to parse and construct the query object. However * if qstr=<code>{!prefix f=myfield}foo</code> * then the prefix query parser will be used. */ public static QParser getParser(String qstr, String defaultType, SolrQueryRequest req) throws ParseException { SolrParams localParams = QueryParsing.getLocalParams(qstr, req.getParams()); String type; if (localParams == null) { type = defaultType; } else { String localType = localParams.get(QueryParsing.TYPE); type = localType == null ? defaultType : localType; qstr = localParams.get("v"); } type = type==null ? QParserPlugin.DEFAULT_QTYPE : type; QParserPlugin qplug = req.getCore().getQueryPlugin(type); return qplug.createParser(qstr, localParams, req.getParams(), req); }