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;
|
Analyzer analyzer;
|
||||||
String field;
|
String field;
|
||||||
int phraseSlop = 0;
|
int phraseSlop = 0;
|
||||||
|
Locale locale;
|
||||||
|
|
||||||
|
|
||||||
/** Parses a query string, returning a {@link org.apache.lucene.search.Query}.
|
/** 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 query the query string to be parsed.
|
||||||
* @param field the default field for query terms.
|
* @param field the default field for query terms.
|
||||||
* @param analyzer used to find terms in the query text.
|
* @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.
|
/** Constructs a query parser.
|
||||||
* @param f the default field for query terms.
|
* @param f the default field for query terms.
|
||||||
* @param a used to find terms in the query text.
|
* @param a used to find terms in the query text.
|
||||||
*/
|
*/
|
||||||
public QueryParser(String f, Analyzer a) {
|
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("")));
|
this(new FastCharStream(new StringReader("")));
|
||||||
analyzer = a;
|
analyzer = a;
|
||||||
field = f;
|
field = f;
|
||||||
|
this.locale = locale;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Parses a query string, returning a
|
/** Parses a query string, returning a
|
||||||
|
@ -243,23 +274,16 @@ public class QueryParser implements QueryParserConstants {
|
||||||
String part2,
|
String part2,
|
||||||
boolean inclusive) throws ParseException
|
boolean inclusive) throws ParseException
|
||||||
{
|
{
|
||||||
boolean isDate = false;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
|
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
|
||||||
df.setLenient(true);
|
df.setLenient(true);
|
||||||
Date d1 = df.parse(part1);
|
Date d1 = df.parse(part1);
|
||||||
Date d2 = df.parse(part2);
|
Date d2 = df.parse(part2);
|
||||||
part1 = DateField.dateToString(d1);
|
part1 = DateField.dateToString(d1);
|
||||||
part2 = DateField.dateToString(d2);
|
part2 = DateField.dateToString(d2);
|
||||||
isDate = true;
|
|
||||||
}
|
}
|
||||||
catch (Exception e) { }
|
catch (Exception e) { }
|
||||||
|
|
||||||
if (!isDate) {
|
|
||||||
// @@@ Add number support
|
|
||||||
}
|
|
||||||
|
|
||||||
return new RangeQuery(new Term(field, part1),
|
return new RangeQuery(new Term(field, part1),
|
||||||
new Term(field, part2),
|
new Term(field, part2),
|
||||||
inclusive);
|
inclusive);
|
||||||
|
|
|
@ -135,9 +135,12 @@ public class QueryParser {
|
||||||
Analyzer analyzer;
|
Analyzer analyzer;
|
||||||
String field;
|
String field;
|
||||||
int phraseSlop = 0;
|
int phraseSlop = 0;
|
||||||
|
Locale locale;
|
||||||
|
|
||||||
|
|
||||||
/** Parses a query string, returning a {@link org.apache.lucene.search.Query}.
|
/** 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 query the query string to be parsed.
|
||||||
* @param field the default field for query terms.
|
* @param field the default field for query terms.
|
||||||
* @param analyzer used to find terms in the query text.
|
* @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.
|
/** Constructs a query parser.
|
||||||
* @param f the default field for query terms.
|
* @param f the default field for query terms.
|
||||||
* @param a used to find terms in the query text.
|
* @param a used to find terms in the query text.
|
||||||
*/
|
*/
|
||||||
public QueryParser(String f, Analyzer a) {
|
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("")));
|
this(new FastCharStream(new StringReader("")));
|
||||||
analyzer = a;
|
analyzer = a;
|
||||||
field = f;
|
field = f;
|
||||||
|
this.locale = locale;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Parses a query string, returning a
|
/** Parses a query string, returning a
|
||||||
|
@ -305,23 +336,16 @@ public class QueryParser {
|
||||||
String part2,
|
String part2,
|
||||||
boolean inclusive) throws ParseException
|
boolean inclusive) throws ParseException
|
||||||
{
|
{
|
||||||
boolean isDate = false;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
|
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
|
||||||
df.setLenient(true);
|
df.setLenient(true);
|
||||||
Date d1 = df.parse(part1);
|
Date d1 = df.parse(part1);
|
||||||
Date d2 = df.parse(part2);
|
Date d2 = df.parse(part2);
|
||||||
part1 = DateField.dateToString(d1);
|
part1 = DateField.dateToString(d1);
|
||||||
part2 = DateField.dateToString(d2);
|
part2 = DateField.dateToString(d2);
|
||||||
isDate = true;
|
|
||||||
}
|
}
|
||||||
catch (Exception e) { }
|
catch (Exception e) { }
|
||||||
|
|
||||||
if (!isDate) {
|
|
||||||
// @@@ Add number support
|
|
||||||
}
|
|
||||||
|
|
||||||
return new RangeQuery(new Term(field, part1),
|
return new RangeQuery(new Term(field, part1),
|
||||||
new Term(field, part2),
|
new Term(field, part2),
|
||||||
inclusive);
|
inclusive);
|
||||||
|
|
Loading…
Reference in New Issue