Yes.. it is not related to this particular mail thread. I will post separate mail.
Thanks Sandeep On Wed, Oct 23, 2013 at 4:36 PM, Jack Krupansky <j...@basetechnology.com>wrote: > Not in just a few words. Do you have specific questions? I mean none of > that relates to parsing of fq, the topic of this particular email thread, > right? > > -- Jack Krupansky > > -----Original Message----- From: Sandeep Gupta > Sent: Wednesday, October 23, 2013 3:58 AM > To: solr-user@lucene.apache.org > Subject: Re: Class name of parsing the fq clause > > > Thanks Jack for detailing out the parser logic. > Would it be possible for you to say something more about filter cache code > flow... sometimes we do not use fq parameter in query string and pass the > raw query.... > > Regards > Sandeep > > > On Mon, Oct 21, 2013 at 7:11 PM, Jack Krupansky <j...@basetechnology.com>* > *wrote: > > Start with org.apache.solr.handler.****component.QueryComponent#**** >> prepare >> >> which fetches the fq parameters and indirectly invokes the query >> parser(s): >> >> String[] fqs = req.getParams().getParams(****CommonParams.FQ); >> >> if (fqs!=null && fqs.length!=0) { >> List<Query> filters = rb.getFilters(); >> // if filters already exists, make a copy instead of modifying the >> original >> filters = filters == null ? new ArrayList<Query>(fqs.length) : new >> ArrayList<Query>(filters); >> for (String fq : fqs) { >> if (fq != null && fq.trim().length()!=0) { >> QParser fqp = QParser.getParser(fq, null, req); >> filters.add(fqp.getQuery()); >> } >> } >> // only set the filters if they are not empty otherwise >> // fq=&someotherParam= will trigger all docs filter for every request >> // if filter cache is disabled >> if (!filters.isEmpty()) { >> rb.setFilters( filters ); >> >> Note that this line actually invokes the parser: >> >> filters.add(fqp.getQuery()); >> >> Then in org.apache.lucene.search.****Query.QParser#getParser: >> >> QParserPlugin qplug = req.getCore().getQueryPlugin(****parserName); >> QParser parser = qplug.createParser(qstr, localParams, req.getParams(), >> req); >> >> And for the common case of the Lucene query parser, >> org.apache.solr.search. >> **LuceneQParserPlugin#****createParser: >> >> >> public QParser createParser(String qstr, SolrParams localParams, >> SolrParams params, SolrQueryRequest req) { >> return new LuceneQParser(qstr, localParams, params, req); >> } >> >> And then in org.apache.lucene.search.****Query.QParser#getQuery: >> >> >> public Query getQuery() throws SyntaxError { >> if (query==null) { >> query=parse(); >> >> And then in org.apache.lucene.search.****Query.LuceneQParser#parse: >> >> >> lparser = new SolrQueryParser(this, defaultField); >> >> lparser.setDefaultOperator >> (QueryParsing.****getQueryParserDefaultOperator(** >> **getReq().getSchema(), >> getParam(QueryParsing.OP))); >> >> return lparser.parse(qstr); >> >> And then in org.apache.solr.parser.****SolrQueryParserBase#parse: >> >> >> Query res = TopLevelQuery(null); // pass null so we can tell later if an >> explicit field was provided or not >> >> And then in org.apache.solr.parser.****QueryParser#TopLevelQuery, the >> parsing begins. >> >> And org.apache.solr.parser.****QueryParser.jj is the grammar for a basic >> Solr/Lucene query, and org.apache.solr.parser.****QueryParser.java is >> >> generated by JFlex, and a lot of the logic is in the base class of the >> generated class, org.apache.solr.parser.****SolrQueryParserBase.java. >> >> >> Good luck! Happy hunting! >> >> -- Jack Krupansky >> >> -----Original Message----- From: YouPeng Yang >> Sent: Monday, October 21, 2013 2:57 AM >> To: solr-user@lucene.apache.org >> Subject: Class name of parsing the fq clause >> >> >> Hi >> I search the solr with fq clause,which is like: >> fq=BEGINTIME:[2013-08-25T16:****00:00Z TO *] AND BUSID:(M30000 OR >> M90000) >> >> >> >> I am curious about the parsing process . I want to study it. >> What is the Java file name describes the parsing process of the fq >> clause. >> >> >> Thanks >> >> Regards. >> >> >