I was trying to port surround parer in 4.0 to 3.5 After getting the plugin to work I am not able to get the following results:
http://localhost:8983/solr/collection1/select?q=_query_:{!surround}features:(document3w shiny) this works on 4.0 but not on 3.5 with the plugin installed 3.5 query http://localhost:8983/solr/select?q=_query_:{!surround}features:(document3w shiny) queries with and/or/not work correctly. any suggestion as to what might be the problem ? thanks, code ------------- import org.apache.lucene.queryParser.surround.query.SrndQuery; import org.apache.lucene.queryParser.ParseException;//import org.apache.lucene.queryparser.classic.ParseException; 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.handler.SnapPuller; import org.apache.solr.request.SolrQueryRequest; import org.apache.solr.schema.IndexSchema; import org.apache.lucene.queryParser.surround.parser.*; import org.apache.lucene.queryParser.surround.query.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * porting solr 4.0 surround parser to 3.5 */ public class SurroundQParserPlugin extends QParserPlugin { public static String NAME = "surround"; @Override public void init(NamedList args) { } @Override public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) { return new SurroundQParser(qstr, localParams, params, req); } } class SurroundQParser extends QParser { protected static final Logger LOG = LoggerFactory .getLogger(SurroundQParser.class); static final int DEFMAXBASICQUERIES = 1000; static final String MBQParam = "maxBasicQueries"; String sortStr; SolrQueryParser lparser; int maxBasicQueries; public SurroundQParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) { super(qstr, localParams, params, req); } @Override public Query parse() throws org.apache.lucene.queryParser.ParseException { SrndQuery sq; String qstr = getString(); if (qstr == null) return null; String mbqparam = getParam(MBQParam); if (mbqparam == null) { this.maxBasicQueries = DEFMAXBASICQUERIES; } else { try { this.maxBasicQueries = Integer.parseInt(mbqparam); } catch (Exception e) { LOG.warn("Couldn't parse maxBasicQueries value " + mbqparam +", using default of 1000"); this.maxBasicQueries = DEFMAXBASICQUERIES; } } // ugh .. colliding ParseExceptions try { sq = org.apache.lucene.queryParser.surround.parser.QueryParser .parse(qstr); } catch (org.apache.lucene.queryParser.surround.parser.ParseException pe) { throw new org.apache.lucene.queryParser.ParseException( pe.getMessage()); } // so what do we do with the SrndQuery ?? // processing based on example in LIA Ch 9 BasicQueryFactory bqFactory = new BasicQueryFactory(this.maxBasicQueries); String defaultField = getDefaultField(getReq().getSchema(),getParam(CommonParams.DF)); Query lquery = sq.makeLuceneQueryField(defaultField, bqFactory); return lquery; } public static String getDefaultField(final IndexSchema s, final String df) { return df != null ? df : s.getDefaultSearchFieldName(); } } -- Anirudha P. Jadhav