[ 
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: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to