6172 |
18 Mar 21 |
nicklas |
1 |
package net.sf.basedb.varsearch.query; |
6172 |
18 Mar 21 |
nicklas |
2 |
|
6172 |
18 Mar 21 |
nicklas |
3 |
import org.apache.lucene.index.Term; |
6172 |
18 Mar 21 |
nicklas |
4 |
import org.apache.lucene.search.Query; |
6172 |
18 Mar 21 |
nicklas |
5 |
|
6172 |
18 Mar 21 |
nicklas |
6 |
/** |
6172 |
18 Mar 21 |
nicklas |
Helper implementation for comparable fields. Eg. fields where the values can be |
6172 |
18 Mar 21 |
nicklas |
compared with '>' and '<'. The newTermQuery() method handles various operates and |
6172 |
18 Mar 21 |
nicklas |
convert them to range queries. If no operator is present the newExactQuery() method |
6172 |
18 Mar 21 |
nicklas |
is called. This should be implemented by subclasses. |
6172 |
18 Mar 21 |
nicklas |
11 |
|
6172 |
18 Mar 21 |
nicklas |
@author nicklas |
6172 |
18 Mar 21 |
nicklas |
13 |
*/ |
6172 |
18 Mar 21 |
nicklas |
14 |
public abstract class ComparableQueryField |
6172 |
18 Mar 21 |
nicklas |
15 |
extends QueryField |
6172 |
18 Mar 21 |
nicklas |
16 |
{ |
6172 |
18 Mar 21 |
nicklas |
17 |
|
6172 |
18 Mar 21 |
nicklas |
18 |
protected ComparableQueryField() |
6172 |
18 Mar 21 |
nicklas |
19 |
{} |
6172 |
18 Mar 21 |
nicklas |
20 |
|
6172 |
18 Mar 21 |
nicklas |
21 |
@Override |
6172 |
18 Mar 21 |
nicklas |
22 |
public Query newTermQuery(Term term) |
6172 |
18 Mar 21 |
nicklas |
23 |
{ |
6172 |
18 Mar 21 |
nicklas |
24 |
String field = term.field(); |
6172 |
18 Mar 21 |
nicklas |
25 |
String val = term.bytes().utf8ToString(); |
6172 |
18 Mar 21 |
nicklas |
26 |
Query q = null; |
6172 |
18 Mar 21 |
nicklas |
27 |
if (val.startsWith(">=")) |
6172 |
18 Mar 21 |
nicklas |
28 |
{ |
6172 |
18 Mar 21 |
nicklas |
29 |
q = newRangeQuery(field, val.substring(2), null, true, true); |
6172 |
18 Mar 21 |
nicklas |
30 |
} |
6172 |
18 Mar 21 |
nicklas |
31 |
else if (val.startsWith(">")) |
6172 |
18 Mar 21 |
nicklas |
32 |
{ |
6172 |
18 Mar 21 |
nicklas |
33 |
q = newRangeQuery(field, val.substring(1), null, false, true); |
6172 |
18 Mar 21 |
nicklas |
34 |
} |
6172 |
18 Mar 21 |
nicklas |
35 |
else if (val.startsWith("<=")) |
6172 |
18 Mar 21 |
nicklas |
36 |
{ |
6172 |
18 Mar 21 |
nicklas |
37 |
q = newRangeQuery(field, null, val.substring(2), true, true); |
6172 |
18 Mar 21 |
nicklas |
38 |
} |
6172 |
18 Mar 21 |
nicklas |
39 |
else if (val.startsWith("<")) |
6172 |
18 Mar 21 |
nicklas |
40 |
{ |
6172 |
18 Mar 21 |
nicklas |
41 |
q = newRangeQuery(field, null, val.substring(1), true, false); |
6172 |
18 Mar 21 |
nicklas |
42 |
} |
6172 |
18 Mar 21 |
nicklas |
43 |
else |
6172 |
18 Mar 21 |
nicklas |
44 |
{ |
6172 |
18 Mar 21 |
nicklas |
45 |
q = newExactQuery(field, val); |
6172 |
18 Mar 21 |
nicklas |
46 |
} |
6172 |
18 Mar 21 |
nicklas |
47 |
return q; |
6172 |
18 Mar 21 |
nicklas |
48 |
} |
6172 |
18 Mar 21 |
nicklas |
49 |
|
6172 |
18 Mar 21 |
nicklas |
50 |
/** |
6172 |
18 Mar 21 |
nicklas |
Create a new query that searches for an exact value. |
6172 |
18 Mar 21 |
nicklas |
52 |
*/ |
6172 |
18 Mar 21 |
nicklas |
53 |
public abstract Query newExactQuery(String field, String value); |
6172 |
18 Mar 21 |
nicklas |
54 |
|
6172 |
18 Mar 21 |
nicklas |
55 |
|
6172 |
18 Mar 21 |
nicklas |
56 |
} |