mirror of https://github.com/apache/lucene.git
Add locale option to QueryParser, allowing date range to be dealt with a bit more flexibly.
git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@150077 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
399ec233ff
commit
c3bae8805b
|
@ -73,9 +73,12 @@ public class QueryParser implements QueryParserConstants {
|
|||
Analyzer analyzer;
|
||||
String field;
|
||||
int phraseSlop = 0;
|
||||
Locale locale;
|
||||
|
||||
|
||||
/** Parses a query string, returning a {@link org.apache.lucene.search.Query}.
|
||||
* Default locale is used for date range parsing.
|
||||
* Use {@link #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 @@ public class QueryParser implements QueryParserConstants {
|
|||
}
|
||||
}
|
||||
|
||||
/** Parses a query string, returning a {@link 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,23 +274,16 @@ public class QueryParser implements QueryParserConstants {
|
|||
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),
|
||||
inclusive);
|
||||
|
|
|
@ -135,9 +135,12 @@ public class QueryParser {
|
|||
Analyzer analyzer;
|
||||
String field;
|
||||
int phraseSlop = 0;
|
||||
Locale locale;
|
||||
|
||||
|
||||
/** Parses a query string, returning a {@link org.apache.lucene.search.Query}.
|
||||
* Default locale is used for date range parsing.
|
||||
* Use {@link #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 @@ public class QueryParser {
|
|||
}
|
||||
}
|
||||
|
||||
/** Parses a query string, returning a {@link 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,23 +336,16 @@ public class QueryParser {
|
|||
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),
|
||||
inclusive);
|
||||
|
|
Loading…
Reference in New Issue