Mercurial Hosting > luan
annotate src/goodjava/lucene/queryparser/GoodQueryParser.java @ 2021:b8e5d53c4fc9
admin monitors scheduler
| author | Franklin Schmidt <fschmidt@gmail.com> | 
|---|---|
| date | Mon, 20 Oct 2025 14:45:27 -0600 | 
| parents | d1e7564a9ce5 | 
| children | 
| rev | line source | 
|---|---|
| 1458 | 1 package goodjava.lucene.queryparser; | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
2 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
3 import java.util.List; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
4 import java.util.ArrayList; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
5 import java.util.regex.Pattern; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
6 import org.apache.lucene.search.Query; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
7 import org.apache.lucene.search.MatchAllDocsQuery; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
8 import org.apache.lucene.search.BooleanClause; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
9 import org.apache.lucene.search.BooleanQuery; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
10 import org.apache.lucene.search.Sort; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
11 import org.apache.lucene.search.SortField; | 
| 
1402
 
27efb1fcbcb5
move luan.lib to goodjava
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1362 
diff
changeset
 | 
12 import goodjava.parser.Parser; | 
| 
 
27efb1fcbcb5
move luan.lib to goodjava
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1362 
diff
changeset
 | 
13 import goodjava.parser.ParseException; | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
14 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
15 | 
| 1459 | 16 public class GoodQueryParser { | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
17 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
18 public static Query parseQuery(FieldParser fieldParser,String query) throws ParseException { | 
| 1459 | 19 return new GoodQueryParser(fieldParser,query).parseQuery(); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
20 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
21 | 
| 1622 | 22 public static String quote(String s) { | 
| 23 s = s.replace("\\","\\\\"); | |
| 24 s = s.replace("\b","\\b"); | |
| 25 s = s.replace("\f","\\f"); | |
| 26 s = s.replace("\n","\\n"); | |
| 27 s = s.replace("\r","\\r"); | |
| 28 s = s.replace("\t","\\t"); | |
| 29 s = s.replace("\"","\\\""); | |
| 30 return '"'+s+'"'; | |
| 31 } | |
| 32 | |
| 1619 | 33 public static String escape(String s) { | 
| 1458 | 34 s = s.replace("\\","\\\\"); | 
| 35 s = s.replace("\b","\\b"); | |
| 36 s = s.replace("\f","\\f"); | |
| 37 s = s.replace("\n","\\n"); | |
| 38 s = s.replace("\r","\\r"); | |
| 39 s = s.replace("\t","\\t"); | |
| 40 s = s.replace("\"","\\\""); | |
| 1621 | 41 s = s.replace("-","\\-"); | 
| 1619 | 42 return s; | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
43 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
44 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
45 public static Sort parseSort(FieldParser fieldParser,String sort) throws ParseException { | 
| 1459 | 46 return new GoodQueryParser(fieldParser,sort).parseSort(); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
47 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
48 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
49 | 
| 
1749
 
d1e7564a9ce5
improve query parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1622 
diff
changeset
 | 
50 private static final String NOT_IN_RANGE = " \t\r\n\":[]{}^()"; | 
| 
 
d1e7564a9ce5
improve query parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1622 
diff
changeset
 | 
51 private static final String NOT_IN_TERM = NOT_IN_RANGE; | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
52 private static final String NOT_IN_FIELD = NOT_IN_TERM + ","; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
53 private final FieldParser fieldParser; | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
54 private final Parser parser; | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
55 | 
| 1459 | 56 private GoodQueryParser(FieldParser fieldParser,String query) { | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
57 this.fieldParser = fieldParser; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
58 this.parser = new Parser(query); | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
59 parser.begin(); | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
60 } | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
61 | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
62 ParseException exception(String msg) { | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
63 parser.failure(); | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
64 return new ParseException(parser,msg); | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
65 } | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
66 | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
67 ParseException exception(Exception cause) { | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
68 parser.failure(); | 
| 
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
69 return new ParseException(parser,cause); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
70 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
71 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
72 private Query parseQuery() throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
73 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
74 BooleanQuery bq = new BooleanQuery(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
75 while( !parser.endOfInput() ) { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
76 bq.add( Term(null) ); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
77 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
78 BooleanClause[] clauses = bq.getClauses(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
79 switch( clauses.length ) { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
80 case 0: | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
81 return new MatchAllDocsQuery(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
82 case 1: | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
83 { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
84 BooleanClause bc = clauses[0]; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
85 if( bc.getOccur() != BooleanClause.Occur.MUST_NOT ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
86 return bc.getQuery(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
87 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
88 default: | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
89 return bq; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
90 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
91 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
92 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
93 private BooleanClause Term(String defaultField) throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
94 BooleanClause.Occur occur; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
95 if( parser.match('+') ) { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
96 occur = BooleanClause.Occur.MUST; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
97 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
98 } else if( parser.match('-') ) { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
99 occur = BooleanClause.Occur.MUST_NOT; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
100 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
101 } else { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
102 occur = BooleanClause.Occur.SHOULD; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
103 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
104 String field = QueryField(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
105 if( field == null ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
106 field = defaultField; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
107 Query query = NestedTerm(field); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
108 if( query == null ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
109 query = RangeTerm(field); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
110 if( query == null ) { | 
| 
1572
 
45e42f403fb3
minor - lucene query parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1564 
diff
changeset
 | 
111 //parser.begin(); | 
| 
1362
 
77f2d091f17f
minor - SaneQueryParser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1344 
diff
changeset
 | 
112 String match = SimpleTerm(NOT_IN_TERM); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
113 query = fieldParser.getQuery(this,field,match); | 
| 
1572
 
45e42f403fb3
minor - lucene query parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1564 
diff
changeset
 | 
114 //parser.success(); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
115 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
116 if( parser.match('^') ) { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
117 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
118 int start = parser.begin(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
119 try { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
120 while( parser.anyOf("0123456789.") ); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
121 String match = parser.textFrom(start); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
122 float boost = Float.parseFloat(match); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
123 query.setBoost(boost); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
124 } catch(NumberFormatException e) { | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
125 throw exception(e); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
126 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
127 parser.success(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
128 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
129 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
130 BooleanClause bc = new BooleanClause(query,occur); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
131 return bc; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
132 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
133 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
134 private Query NestedTerm(String field) throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
135 parser.begin(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
136 if( !parser.match('(') ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
137 return parser.failure(null); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
138 BooleanQuery bq = new BooleanQuery(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
139 while( !parser.match(')') ) { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
140 if( parser.endOfInput() ) | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
141 throw exception("unclosed parentheses"); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
142 bq.add( Term(field) ); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
143 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
144 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
145 BooleanClause[] clauses = bq.getClauses(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
146 switch( clauses.length ) { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
147 case 0: | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
148 throw exception("empty parentheses"); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
149 case 1: | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
150 { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
151 BooleanClause bc = clauses[0]; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
152 if( bc.getOccur() != BooleanClause.Occur.MUST_NOT ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
153 return parser.success(bc.getQuery()); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
154 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
155 default: | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
156 return parser.success(bq); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
157 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
158 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
159 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
160 private Query RangeTerm(String field) throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
161 parser.begin(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
162 if( !parser.anyOf("[{") ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
163 return parser.failure(null); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
164 boolean includeMin = parser.lastChar() == '['; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
165 Spaces(); | 
| 
1362
 
77f2d091f17f
minor - SaneQueryParser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1344 
diff
changeset
 | 
166 String minQuery = SimpleTerm(NOT_IN_RANGE); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
167 TO(); | 
| 
1362
 
77f2d091f17f
minor - SaneQueryParser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1344 
diff
changeset
 | 
168 String maxQuery = SimpleTerm(NOT_IN_RANGE); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
169 if( !parser.anyOf("]}") ) | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
170 throw exception("unclosed range"); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
171 boolean includeMax = parser.lastChar() == ']'; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
172 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
173 Query query = fieldParser.getRangeQuery(this,field,minQuery,maxQuery,includeMin,includeMax); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
174 return parser.success(query); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
175 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
176 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
177 private void TO() throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
178 parser.begin(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
179 if( !(parser.match("TO") && Space()) ) | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
180 throw exception("'TO' expected"); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
181 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
182 parser.success(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
183 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
184 | 
| 
1362
 
77f2d091f17f
minor - SaneQueryParser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1344 
diff
changeset
 | 
185 private String SimpleTerm(String exclude) throws ParseException { | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
186 parser.begin(); | 
| 1422 | 187 String match = Quoted(); | 
| 188 if( match==null ) | |
| 
1362
 
77f2d091f17f
minor - SaneQueryParser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1344 
diff
changeset
 | 
189 match = Unquoted(exclude); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
190 if( match.length() == 0 ) | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
191 throw exception("invalid input"); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
192 return parser.success(match); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
193 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
194 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
195 private String QueryField() throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
196 parser.begin(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
197 String match = Field(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
198 if( match==null || !parser.match(':') ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
199 return parser.failure((String)null); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
200 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
201 return parser.success(match); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
202 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
203 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
204 private String Field() throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
205 parser.begin(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
206 String match = Unquoted(NOT_IN_FIELD); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
207 if( match.length()==0 ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
208 return parser.failure((String)null); | 
| 1619 | 209 match = StringFieldParser.unescape(this,match); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
210 return parser.success(match); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
211 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
212 | 
| 1422 | 213 private String Quoted() throws ParseException { | 
| 214 parser.begin(); | |
| 215 if( !parser.match('"') ) | |
| 216 return parser.failure(null); | |
| 217 StringBuilder sb = new StringBuilder(); | |
| 218 while( parser.anyChar() ) { | |
| 219 char c = parser.lastChar(); | |
| 220 switch(c) { | |
| 221 case '"': | |
| 
1564
 
b1195cfe8712
lucene/queryparser fix
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
1459 
diff
changeset
 | 
222 Spaces(); | 
| 1422 | 223 return parser.success(sb.toString()); | 
| 224 case '\\': | |
| 225 if( parser.anyChar() ) { | |
| 226 c = parser.lastChar(); | |
| 227 switch(c) { | |
| 228 case '"': | |
| 229 case '\\': | |
| 230 sb.append(c); | |
| 231 continue; | |
| 232 case 'b': | |
| 233 sb.append('\b'); | |
| 234 continue; | |
| 235 case 'f': | |
| 236 sb.append('\f'); | |
| 237 continue; | |
| 238 case 'n': | |
| 239 sb.append('\n'); | |
| 240 continue; | |
| 241 case 'r': | |
| 242 sb.append('\r'); | |
| 243 continue; | |
| 244 case 't': | |
| 245 sb.append('\t'); | |
| 246 continue; | |
| 247 case 'u': | |
| 248 int n = 0; | |
| 249 for( int i=0; i<4; i++ ) { | |
| 250 int d; | |
| 251 if( parser.inCharRange('0','9') ) { | |
| 252 d = parser.lastChar() - '0'; | |
| 253 } else if( parser.inCharRange('a','f') ) { | |
| 254 d = parser.lastChar() - 'a' + 10; | |
| 255 } else if( parser.inCharRange('A','F') ) { | |
| 256 d = parser.lastChar() - 'A' + 10; | |
| 257 } else { | |
| 258 throw exception("invalid hex digit"); | |
| 259 } | |
| 260 n = 16*n + d; | |
| 261 } | |
| 262 sb.append((char)n); | |
| 263 continue; | |
| 264 } | |
| 265 } | |
| 266 throw exception("invalid escape char"); | |
| 267 default: | |
| 268 sb.append(c); | |
| 269 } | |
| 270 } | |
| 271 parser.failure(); | |
| 272 throw exception("unclosed string"); | |
| 273 } | |
| 274 | |
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
275 private String Unquoted(String exclude) throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
276 int start = parser.begin(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
277 while( parser.noneOf(exclude) ) { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
278 checkEscape(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
279 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
280 String match = parser.textFrom(start); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
281 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
282 return parser.success(match); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
283 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
284 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
285 private void checkEscape() { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
286 if( parser.lastChar() == '\\' ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
287 parser.anyChar(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
288 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
289 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
290 private void Spaces() { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
291 while( Space() ); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
292 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
293 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
294 private boolean Space() { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
295 return parser.anyOf(" \t\r\n"); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
296 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
297 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
298 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
299 // sort | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
300 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
301 private Sort parseSort() throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
302 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
303 if( parser.endOfInput() ) | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
304 return null; | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
305 List<SortField> list = new ArrayList<SortField>(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
306 list.add( SortField() ); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
307 while( !parser.endOfInput() ) { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
308 parser.begin(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
309 if( !parser.match(',') ) | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
310 throw exception("',' expected"); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
311 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
312 parser.success(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
313 list.add( SortField() ); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
314 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
315 return new Sort(list.toArray(new SortField[0])); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
316 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
317 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
318 private SortField SortField() throws ParseException { | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
319 parser.begin(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
320 String field = Field(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
321 if( field==null ) | 
| 
1110
 
38a42f437fd2
queryparser now uses parsers.Parser
 
Franklin Schmidt <fschmidt@gmail.com> 
parents: 
775 
diff
changeset
 | 
322 throw exception("invalid input"); | 
| 
730
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
323 boolean reverse = !parser.matchIgnoreCase("asc") && parser.matchIgnoreCase("desc"); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
324 Spaces(); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
325 SortField sf = fieldParser.getSortField(this,field,reverse); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
326 return parser.success(sf); | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
327 } | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
328 | 
| 
 
01e68da6983b
add sane-lucene-queryparser source to luan
 
Franklin Schmidt <fschmidt@gmail.com> 
parents:  
diff
changeset
 | 
329 } | 
