package lux.solr;
import java.io.ByteArrayInputStream;
import java.nio.charset.Charset;
import lux.query.parser.XmlQueryParser;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryparser.xml.ParserException;
import org.apache.lucene.search.Query;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.search.QParser;
import org.apache.solr.search.QParserPlugin;
import org.apache.solr.search.SyntaxError;
public class XmlQParserPlugin extends QParserPlugin {
@Override
public void init(@SuppressWarnings("rawtypes") NamedList args) {
}
@Override
public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
return new XmlQParser (qstr, localParams, params, req);
}
class XmlQParser extends QParser {
private XmlQueryParser xmlParser;
public XmlQParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
super(qstr, localParams, params, req);
}
@Override
public Query parse() throws SyntaxError {
if (qstr == null || qstr.length()==0) return null;
String defaultField = getParam(CommonParams.DF);
if (defaultField==null) {
defaultField = getReq().getSchema().getDefaultSearchFieldName();
}
xmlParser = new XmlQueryParser(defaultField, new StandardAnalyzer(req.getCore().getSolrConfig().luceneMatchVersion));
try {
return xmlParser.parse(new ByteArrayInputStream(qstr.getBytes(Charset.forName("utf-8"))));
} catch (ParserException e) {
throw new SyntaxError (e);
}
}
}
}