:   public static FunctionQuery parseFunction(String func, IndexSchema schema)
: throws ParseException {
:     SolrCore core = SolrCore.getSolrCore();
:     return (FunctionQuery)(QParser.getParser(func,"func",new
: LocalSolrQueryRequest(core,new HashMap())).parse());
:     // return new FunctionQuery(parseValSource(new StrParser(func), schema));
:   }

Ugh.  I don't think there's any easy way to fix that so it satisfies every 
imaginable usecase.

The sanest thing to do would probably be to make parseFunction construct a 
local instance of FunctionQParser (with a null SolrQueryRequest) instead 
of using QParser.getParser(...).  that should be fairly close to the way 
it worked in older versions

(hmmm... except FunctionQParser does something similar to get a 
ValueSourceParser ... a new constructor for FunctionQParser that 
explicitly tells it to use ValueSourceParser.standardValueSourceParsers 
might be in order).

I think it goes without saying that QueryParsing.parseFunction should be 
deprecated as well ... fortunately it's only used in a few places in the 
core code ... unfortunately those places also don't currently have access 
to a SolrQueryRequest at the moment: 
  1) SolrPluginUtils.parseFuncs -- should probably be deprecated, callers 
of it should start using the QParser APIs.
  2) SolrQueryParser.getFieldQuery -- it's only used if the 
SolrQueryParser was constructed with an IndexSchema and not with a QParser 
(in which case it can ask the QParser for a subParser) .. the IndexSchema 
constructor should probably be deprecated as well (but i haven't dug in to 
see how far down the rabit hole that change would go)


-Hoss

Reply via email to