ehatcher 2003/10/02 20:12:42 Modified: src/java/org/apache/lucene/queryParser QueryParser.java QueryParser.jj Log: Add locale option to QueryParser, allowing date range to be dealt with a bit more flexibly. Revision Changes Path 1.3 +32 -8 jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.java Index: QueryParser.java =================================================================== RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- QueryParser.java 30 Sep 2003 04:38:36 -0000 1.2 +++ QueryParser.java 3 Oct 2003 03:12:42 -0000 1.3 @@ -73,9 +73,12 @@ Analyzer analyzer; String field; int phraseSlop = 0; + Locale locale; /** Parses a query string, returning a [EMAIL PROTECTED] org.apache.lucene.search.Query}. + * Default locale is used for date range parsing. + * Use [EMAIL PROTECTED] #parse(String, String, Analyzer, Locale)} for non-default locale handling. * @param query the query string to be parsed. * @param field the default field for query terms. * @param analyzer used to find terms in the query text. @@ -92,14 +95,42 @@ } } + /** Parses a query string, returning a [EMAIL PROTECTED] org.apache.lucene.search.Query}. + * @param query the query string to be parsed. + * @param field the default field for query terms. + * @param analyzer used to find terms in the query text. + * @param locale locale to use for date range parsing + * @throws ParseException if the parsing fails + */ + static public Query parse(String query, String field, Analyzer analyzer, Locale locale) + throws ParseException { + try { + QueryParser parser = new QueryParser(field, analyzer, locale); + return parser.parse(query); + } + catch (TokenMgrError tme) { + throw new ParseException(tme.getMessage()); + } + } + /** Constructs a query parser. * @param f the default field for query terms. * @param a used to find terms in the query text. */ public QueryParser(String f, Analyzer a) { + this(f, a, Locale.getDefault()); + } + + /** Constructs a query parser. + * @param f the default field for query terms. + * @param a used to find terms in the query text. + * @param locale + */ + public QueryParser(String f, Analyzer a, Locale locale) { this(new FastCharStream(new StringReader(""))); analyzer = a; field = f; + this.locale = locale; } /** Parses a query string, returning a @@ -243,22 +274,15 @@ String part2, boolean inclusive) throws ParseException { - boolean isDate = false; - try { - DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); + DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); df.setLenient(true); Date d1 = df.parse(part1); Date d2 = df.parse(part2); part1 = DateField.dateToString(d1); part2 = DateField.dateToString(d2); - isDate = true; } catch (Exception e) { } - - if (!isDate) { - // @@@ Add number support - } return new RangeQuery(new Term(field, part1), new Term(field, part2), 1.31 +32 -8 jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj Index: QueryParser.jj =================================================================== RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- QueryParser.jj 30 Sep 2003 04:38:36 -0000 1.30 +++ QueryParser.jj 3 Oct 2003 03:12:42 -0000 1.31 @@ -135,9 +135,12 @@ Analyzer analyzer; String field; int phraseSlop = 0; + Locale locale; /** Parses a query string, returning a [EMAIL PROTECTED] org.apache.lucene.search.Query}. + * Default locale is used for date range parsing. + * Use [EMAIL PROTECTED] #parse(String, String, Analyzer, Locale)} for non-default locale handling. * @param query the query string to be parsed. * @param field the default field for query terms. * @param analyzer used to find terms in the query text. @@ -154,14 +157,42 @@ } } + /** Parses a query string, returning a [EMAIL PROTECTED] org.apache.lucene.search.Query}. + * @param query the query string to be parsed. + * @param field the default field for query terms. + * @param analyzer used to find terms in the query text. + * @param locale locale to use for date range parsing + * @throws ParseException if the parsing fails + */ + static public Query parse(String query, String field, Analyzer analyzer, Locale locale) + throws ParseException { + try { + QueryParser parser = new QueryParser(field, analyzer, locale); + return parser.parse(query); + } + catch (TokenMgrError tme) { + throw new ParseException(tme.getMessage()); + } + } + /** Constructs a query parser. * @param f the default field for query terms. * @param a used to find terms in the query text. */ public QueryParser(String f, Analyzer a) { + this(f, a, Locale.getDefault()); + } + + /** Constructs a query parser. + * @param f the default field for query terms. + * @param a used to find terms in the query text. + * @param locale + */ + public QueryParser(String f, Analyzer a, Locale locale) { this(new FastCharStream(new StringReader(""))); analyzer = a; field = f; + this.locale = locale; } /** Parses a query string, returning a @@ -305,22 +336,15 @@ String part2, boolean inclusive) throws ParseException { - boolean isDate = false; - try { - DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT); + DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); df.setLenient(true); Date d1 = df.parse(part1); Date d2 = df.parse(part2); part1 = DateField.dateToString(d1); part2 = DateField.dateToString(d2); - isDate = true; } catch (Exception e) { } - - if (!isDate) { - // @@@ Add number support - } return new RangeQuery(new Term(field, part1), new Term(field, part2),
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]