HI Jack Thanks a lot for your explanation.
2013/10/21 Jack Krupansky <j...@basetechnology.com> > 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. >