|
Lucene example source code file (QueryParser.java)
The Lucene QueryParser.java source code/* Generated By:JavaCC: Do not edit this line. QueryParser.java */ package org.apache.lucene.queryParser.surround.parser; import java.util.ArrayList; import java.util.List; import java.io.StringReader; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.queryParser.surround.query.SrndQuery; import org.apache.lucene.queryParser.surround.query.FieldsQuery; import org.apache.lucene.queryParser.surround.query.OrQuery; import org.apache.lucene.queryParser.surround.query.AndQuery; import org.apache.lucene.queryParser.surround.query.NotQuery; import org.apache.lucene.queryParser.surround.query.DistanceQuery; import org.apache.lucene.queryParser.surround.query.SrndTermQuery; import org.apache.lucene.queryParser.surround.query.SrndPrefixQuery; import org.apache.lucene.queryParser.surround.query.SrndTruncQuery; /** * This class is generated by JavaCC. The only method that clients should need * to call is <a href="#parse">parse(). */ public class QueryParser implements QueryParserConstants { final int minimumPrefixLength = 3; final int minimumCharsInTrunc = 3; final String truncationErrorMessage = "Too unrestrictive truncation: "; final String boostErrorMessage = "Cannot handle boost value: "; /* CHECKME: These should be the same as for the tokenizer. How? */ final char truncator = '*'; final char anyChar = '?'; final char quote = '\"'; final char fieldOperator = ':'; final char comma = ','; /* prefix list separator */ final char carat = '^'; /* weight operator */ static public SrndQuery parse(String query) throws ParseException { QueryParser parser = new QueryParser(); return parser.parse2(query); } public QueryParser() { this(new FastCharStream(new StringReader(""))); } public SrndQuery parse2(String query) throws ParseException { ReInit(new FastCharStream(new StringReader(query))); try { return TopSrndQuery(); } catch (TokenMgrError tme) { throw new ParseException(tme.getMessage()); } } protected SrndQuery getFieldsQuery( SrndQuery q, ArrayList<String> fieldNames) { /* FIXME: check acceptable subquery: at least one subquery should not be * a fields query. */ return new FieldsQuery(q, fieldNames, fieldOperator); } protected SrndQuery getOrQuery(List<SrndQuery> queries, boolean infix, Token orToken) { return new OrQuery(queries, infix, orToken.image); } protected SrndQuery getAndQuery(List<SrndQuery> queries, boolean infix, Token andToken) { return new AndQuery( queries, infix, andToken.image); } protected SrndQuery getNotQuery(List<SrndQuery> queries, Token notToken) { return new NotQuery( queries, notToken.image); } protected static int getOpDistance(String distanceOp) { /* W, 2W, 3W etc -> 1, 2 3, etc. Same for N, 2N ... */ return distanceOp.length() == 1 ? 1 : Integer.parseInt( distanceOp.substring( 0, distanceOp.length() - 1)); } protected static void checkDistanceSubQueries(DistanceQuery distq, String opName) throws ParseException { String m = distq.distanceSubQueryNotAllowed(); if (m != null) { throw new ParseException("Operator " + opName + ": " + m); } } protected SrndQuery getDistanceQuery( List<SrndQuery> queries, boolean infix, Token dToken, boolean ordered) throws ParseException { DistanceQuery dq = new DistanceQuery(queries, infix, getOpDistance(dToken.image), dToken.image, ordered); checkDistanceSubQueries(dq, dToken.image); return dq; } protected SrndQuery getTermQuery( String term, boolean quoted) { return new SrndTermQuery(term, quoted); } protected boolean allowedSuffix(String suffixed) { return (suffixed.length() - 1) >= minimumPrefixLength; } protected SrndQuery getPrefixQuery( String prefix, boolean quoted) { return new SrndPrefixQuery(prefix, quoted, truncator); } protected boolean allowedTruncation(String truncated) { /* At least 3 normal characters needed. */ int nrNormalChars = 0; for (int i = 0; i < truncated.length(); i++) { char c = truncated.charAt(i); if ((c != truncator) && (c != anyChar)) { nrNormalChars++; } } return nrNormalChars >= minimumCharsInTrunc; } protected SrndQuery getTruncQuery(String truncated) { return new SrndTruncQuery(truncated, truncator, anyChar); } final public SrndQuery TopSrndQuery() throws ParseException { SrndQuery q; q = FieldsQuery(); jj_consume_token(0); {if (true) return q;} throw new Error("Missing return statement in function"); } final public SrndQuery FieldsQuery() throws ParseException { SrndQuery q; ArrayList<String> fieldNames; fieldNames = OptionalFields(); q = OrQuery(); {if (true) return (fieldNames == null) ? q : getFieldsQuery(q, fieldNames);} throw new Error("Missing return statement in function"); } final public ArrayList<String> OptionalFields() throws ParseException { Token fieldName; ArrayList<String> fieldNames = null; label_1: while (true) { if (jj_2_1(2)) { ; } else { break label_1; } // to the colon fieldName = jj_consume_token(TERM); jj_consume_token(COLON); if (fieldNames == null) { fieldNames = new ArrayList<String>(); } fieldNames.add(fieldName.image); } {if (true) return fieldNames;} throw new Error("Missing return statement in function"); } final public SrndQuery OrQuery() throws ParseException { SrndQuery q; ArrayList<SrndQuery> queries = null; Token oprt = null; q = AndQuery(); label_2: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case OR: ; break; default: jj_la1[0] = jj_gen; break label_2; } oprt = jj_consume_token(OR); /* keep only last used operator */ if (queries == null) { queries = new ArrayList<SrndQuery>(); queries.add(q); } q = AndQuery(); queries.add(q); } {if (true) return (queries == null) ? q : getOrQuery(queries, true /* infix */, oprt);} throw new Error("Missing return statement in function"); } final public SrndQuery AndQuery() throws ParseException { SrndQuery q; ArrayList<SrndQuery> queries = null; Token oprt = null; q = NotQuery(); label_3: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case AND: ; break; default: jj_la1[1] = jj_gen; break label_3; } oprt = jj_consume_token(AND); /* keep only last used operator */ if (queries == null) { queries = new ArrayList<SrndQuery>(); queries.add(q); } q = NotQuery(); queries.add(q); } {if (true) return (queries == null) ? q : getAndQuery(queries, true /* infix */, oprt);} throw new Error("Missing return statement in function"); } final public SrndQuery NotQuery() throws ParseException { SrndQuery q; ArrayList<SrndQuery> queries = null; Token oprt = null; q = NQuery(); label_4: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case NOT: ; break; default: jj_la1[2] = jj_gen; break label_4; } oprt = jj_consume_token(NOT); /* keep only last used operator */ if (queries == null) { queries = new ArrayList<SrndQuery>(); queries.add(q); } q = NQuery(); queries.add(q); } {if (true) return (queries == null) ? q : getNotQuery(queries, oprt);} throw new Error("Missing return statement in function"); } final public SrndQuery NQuery() throws ParseException { SrndQuery q; ArrayList<SrndQuery> queries; Token dt; q = WQuery(); label_5: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case N: ; break; default: jj_la1[3] = jj_gen; break label_5; } dt = jj_consume_token(N); queries = new ArrayList<SrndQuery>(); queries.add(q); /* left associative */ q = WQuery(); queries.add(q); q = getDistanceQuery(queries, true /* infix */, dt, false /* not ordered */); } {if (true) return q;} throw new Error("Missing return statement in function"); } final public SrndQuery WQuery() throws ParseException { SrndQuery q; ArrayList<SrndQuery> queries; Token wt; q = PrimaryQuery(); label_6: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case W: ; break; default: jj_la1[4] = jj_gen; break label_6; } wt = jj_consume_token(W); queries = new ArrayList<SrndQuery>(); queries.add(q); /* left associative */ q = PrimaryQuery(); queries.add(q); q = getDistanceQuery(queries, true /* infix */, wt, true /* ordered */); } {if (true) return q;} throw new Error("Missing return statement in function"); } final public SrndQuery PrimaryQuery() throws ParseException { /* bracketed weighted query or weighted term */ SrndQuery q; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case LPAREN: jj_consume_token(LPAREN); q = FieldsQuery(); jj_consume_token(RPAREN); break; case OR: case AND: case W: case N: q = PrefixOperatorQuery(); break; case TRUNCQUOTED: case QUOTED: case SUFFIXTERM: case TRUNCTERM: case TERM: q = SimpleTerm(); break; default: jj_la1[5] = jj_gen; jj_consume_token(-1); throw new ParseException(); } OptionalWeights(q); {if (true) return q;} throw new Error("Missing return statement in function"); } final public SrndQuery PrefixOperatorQuery() throws ParseException { Token oprt; List<SrndQuery> queries; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case OR: oprt = jj_consume_token(OR); /* prefix OR */ queries = FieldsQueryList(); {if (true) return getOrQuery(queries, false /* not infix */, oprt);} break; case AND: oprt = jj_consume_token(AND); /* prefix AND */ queries = FieldsQueryList(); {if (true) return getAndQuery(queries, false /* not infix */, oprt);} break; case N: oprt = jj_consume_token(N); /* prefix N */ queries = FieldsQueryList(); {if (true) return getDistanceQuery(queries, false /* not infix */, oprt, false /* not ordered */);} break; case W: oprt = jj_consume_token(W); /* prefix W */ queries = FieldsQueryList(); {if (true) return getDistanceQuery(queries, false /* not infix */, oprt, true /* ordered */);} break; default: jj_la1[6] = jj_gen; jj_consume_token(-1); throw new ParseException(); } throw new Error("Missing return statement in function"); } final public List<SrndQuery> FieldsQueryList() throws ParseException { SrndQuery q; ArrayList<SrndQuery> queries = new ArrayList |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.