mirror of https://github.com/apache/lucene.git
Added support for RangeQuery. The syntax is expressed as follows:
inclusive range = field:[lowerTerm-upperTerm] exclusive range = field:{lowerTerm-upperTerm} git-svn-id: https://svn.apache.org/repos/asf/lucene/java/trunk@149593 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7a28132692
commit
891209bfd3
|
@ -59,13 +59,13 @@ options {
|
|||
|
||||
PARSER_BEGIN(QueryParser)
|
||||
|
||||
package org.apache.lucene.queryParser;
|
||||
package com.lucene.queryParser;
|
||||
|
||||
import java.util.Vector;
|
||||
import java.io.*;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.analysis.*;
|
||||
import org.apache.lucene.search.*;
|
||||
import com.lucene.index.Term;
|
||||
import com.lucene.analysis.*;
|
||||
import com.lucene.search.*;
|
||||
|
||||
/**
|
||||
* This class is generated by JavaCC. The only method that clients should need
|
||||
|
@ -170,7 +170,7 @@ public class QueryParser {
|
|||
|
||||
TokenStream source = analyzer.tokenStream(field, new StringReader(queryText));
|
||||
Vector v = new Vector();
|
||||
org.apache.lucene.analysis.Token t;
|
||||
com.lucene.analysis.Token t;
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
|
@ -197,9 +197,38 @@ public class QueryParser {
|
|||
}
|
||||
}
|
||||
|
||||
private Query getRangeQuery(String field, Analyzer analyzer, String queryText, boolean inclusive)
|
||||
{
|
||||
// Use the analyzer to get all the tokens. There should be 1 or 2.
|
||||
TokenStream source = analyzer.tokenStream(field, new StringReader(queryText));
|
||||
Term[] terms = new Term[2];
|
||||
com.lucene.analysis.Token t;
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
t = source.next();
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
t = null;
|
||||
}
|
||||
if (t != null)
|
||||
{
|
||||
String text = t.termText();
|
||||
if (!text.equalsIgnoreCase("NULL"))
|
||||
{
|
||||
terms[i] = new Term(field, text);
|
||||
}
|
||||
}
|
||||
}
|
||||
return new RangeQuery(terms[0], terms[1], inclusive);
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
QueryParser qp = new QueryParser("field",
|
||||
new org.apache.lucene.analysis.SimpleAnalyzer());
|
||||
new com.lucene.analysis.SimpleAnalyzer());
|
||||
Query q = qp.parse(args[0]);
|
||||
System.out.println(q.toString("field"));
|
||||
}
|
||||
|
@ -245,10 +274,12 @@ PARSER_END(QueryParser)
|
|||
| <QUOTED: "\"" (~["\""])+ "\"">
|
||||
| <NUMBER: (<_NUM_CHAR>)+ "." (<_NUM_CHAR>)+ >
|
||||
| <TERM: <_IDENTIFIER_CHAR>
|
||||
( ~["\"", " ", "\t", "(", ")", ":", "&", "|", "^", "*", "?", "~" ] )* >
|
||||
( ~["\"", " ", "\t", "(", ")", ":", "&", "|", "^", "*", "?", "~", "{", "}", "[", "]" ] )* >
|
||||
| <FUZZY: "~" >
|
||||
| <WILDTERM: <_IDENTIFIER_CHAR>
|
||||
( ~["\"", " ", "\t", "(", ")", ":", "&", "|", "^", "~" ] )* <_IDENTIFIER_CHAR>>
|
||||
( ~["\"", " ", "\t", "(", ")", ":", "&", "|", "^", "~", "{", "}", "[", "]" ] )* <_IDENTIFIER_CHAR>>
|
||||
| <RANGEIN: "[" (~["]"])+ "]">
|
||||
| <RANGEEX: "{" (~["}"])+ "}">
|
||||
}
|
||||
|
||||
<DEFAULT> SKIP : {
|
||||
|
@ -327,6 +358,7 @@ Query Term(String field) : {
|
|||
boolean prefix = false;
|
||||
boolean wildcard = false;
|
||||
boolean fuzzy = false;
|
||||
boolean rangein = false;
|
||||
Query q;
|
||||
}
|
||||
{
|
||||
|
@ -340,6 +372,11 @@ Query Term(String field) : {
|
|||
q = new FuzzyQuery(new Term(field, term.image));
|
||||
else
|
||||
q = getFieldQuery(field, analyzer, term.image); }
|
||||
| (term=<RANGEIN>{rangein=true;}|term=<RANGEEX>)
|
||||
{
|
||||
q = getRangeQuery(field, analyzer,
|
||||
term.image.substring(1, term.image.length()-1), rangein);
|
||||
}
|
||||
| term=<QUOTED>
|
||||
{ q = getFieldQuery(field, analyzer,
|
||||
term.image.substring(1, term.image.length()-1)); }
|
||||
|
|
Loading…
Reference in New Issue