[
https://issues.apache.org/jira/browse/SOLR-839?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13537767#comment-13537767
]
Daniel Collins edited comment on SOLR-839 at 12/21/12 9:21 AM:
---------------------------------------------------------------
We have a version of this we have built with Solr 4.0, it is still WIP, but
this is what we have.
{code}
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.*;
import org.apache.lucene.search.Query;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.xml.*;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
public class XmlQParserPlugin extends QParserPlugin {
private String contentEncoding = "UTF8";
public void init(NamedList args) {
}
public QParser createParser(String qstr, SolrParams localParams,
SolrParams params, SolrQueryRequest req) {
return new XmlQParser(qstr, localParams, params, req);
}
class XmlQParser extends QParser {
public XmlQParser(String qstr, SolrParams localParams,
SolrParams params, SolrQueryRequest req) {
super(qstr, localParams, params, req);
}
public Query parse() throws ParseException {
SolrQueryParser lparser;
String qstr = getString();
if (qstr == null || qstr.length() == 0)
return null;
String defaultField = getParam(CommonParams.DF);
if (defaultField == null) {
defaultField = getReq().getSchema().getDefaultSearchFieldName();
}
lparser = new SolrQueryParser(this, defaultField);
lparser.setDefaultOperator(QueryParsing
.getQueryParserDefaultOperator(getReq().getSchema(),
getParam(QueryParsing.OP)));
CoreParser parser = new
CoreParser(getReq().getSchema().getQueryAnalyzer(), lparser);
// CorePlusExtensions parser requires lucene sandbox, which isn't
bundled with Solr (yet).
// CorePlusExtensionsParser parser = new CorePlusExtensionsParser(
// getReq().getSchema().getQueryAnalyzer(), lparser);
try {
return parser.parse(new ByteArrayInputStream(getString()
.getBytes(contentEncoding)));
} catch (UnsupportedEncodingException e) {
throw new ParseException(e.getMessage());
} catch (ParserException e) {
throw new ParseException(e.getMessage());
}
}
}
}
{code}
As the comment mentions, we can't use the CorePlusExtensionsParser as it
requires the lucene-sandbox.jar which isn't currently bundled with Solr 4.0?
was (Author: dancollins):
We have a version of this we have built with Solr 4.0, it is still WIP, but
this is what we have.
{code}
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.*;
import org.apache.lucene.search.Query;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.xml.*;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
public class XmlQParserPlugin extends QParserPlugin {
private String contentEncoding = "UTF8";
public void init(NamedList args) {
}
public QParser createParser(String qstr, SolrParams localParams,
SolrParams params, SolrQueryRequest req) {
return new XmlQParser(qstr, localParams, params, req);
}
class XmlQParser extends QParser {
public XmlQParser(String qstr, SolrParams localParams,
SolrParams params, SolrQueryRequest req) {
super(qstr, localParams, params, req);
}
public Query parse() throws ParseException {
SolrQueryParser lparser;
String qstr = getString();
if (qstr == null || qstr.length() == 0)
return null;
String defaultField = getParam(CommonParams.DF);
if (defaultField == null) {
defaultField = getReq().getSchema().getDefaultSearchFieldName();
}
lparser = new SolrQueryParser(this, defaultField);
lparser.setDefaultOperator(QueryParsing
.getQueryParserDefaultOperator(getReq().getSchema(),
getParam(QueryParsing.OP)));
CoreParser parser = new
CoreParser(getReq().getSchema().getQueryAnalyzer(), lparser);
// CorePlusExtensions parser requires lucene sandbox, which isn't
bundled with Solr (yet).
// CorePlusExtensionsParser parser = new CorePlusExtensionsParser(
// getReq().getSchema().getQueryAnalyzer(), lparser);
try {
return parser.parse(new ByteArrayInputStream(getString()
.getBytes(contentEncoding)));
} catch (UnsupportedEncodingException e) {
throw new ParseException(e.getMessage());
} catch (ParserException e) {
throw new ParseException(e.getMessage());
}
}
}
}
{code}
As the comment mentions, we can't use the CorePlusExtensionsParser as it
requires the lucene-sandbox.jar which is currently bundled with Solr 4.0?
> XML Query Parser support
> ------------------------
>
> Key: SOLR-839
> URL: https://issues.apache.org/jira/browse/SOLR-839
> Project: Solr
> Issue Type: New Feature
> Components: query parsers
> Affects Versions: 1.3
> Reporter: Erik Hatcher
> Assignee: Erik Hatcher
> Fix For: 4.1, 5.0
>
> Attachments: lucene-xml-query-parser-2.4-dev.jar, SOLR-839.patch
>
>
> Lucene contrib includes a query parser that is able to create the
> full-spectrum of Lucene queries, using an XML data structure.
> This patch adds "xml" query parser support to Solr.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]