Mercurial Hosting > luan
comparison lucene/src/luan/modules/lucene/queryparser/MultiFieldParser.java @ 730:01e68da6983b
add sane-lucene-queryparser source to luan
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 10 Jun 2016 15:41:15 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
729:4ce68aad92b7 | 730:01e68da6983b |
---|---|
1 package luan.modules.lucene.queryparser; | |
2 | |
3 import java.util.Map; | |
4 import java.util.HashMap; | |
5 import org.apache.lucene.search.Query; | |
6 import org.apache.lucene.search.BooleanQuery; | |
7 import org.apache.lucene.search.BooleanClause; | |
8 import org.apache.lucene.search.SortField; | |
9 | |
10 | |
11 public class MultiFieldParser implements FieldParser { | |
12 | |
13 /** | |
14 * maps field name to FieldParser | |
15 */ | |
16 public final Map<String,FieldParser> fields = new HashMap<String,FieldParser>(); | |
17 public boolean allowUnspecifiedFields = false; | |
18 private final FieldParser defaultFieldParser; | |
19 private final String[] defaultFields; | |
20 | |
21 public MultiFieldParser() { | |
22 this.defaultFieldParser = null; | |
23 this.defaultFields = null; | |
24 } | |
25 | |
26 public MultiFieldParser(FieldParser defaultFieldParser,String... defaultFields) { | |
27 this.defaultFieldParser = defaultFieldParser; | |
28 this.defaultFields = defaultFields; | |
29 for( String field : defaultFields ) { | |
30 fields.put(field,defaultFieldParser); | |
31 } | |
32 } | |
33 | |
34 @Override public Query getQuery(SaneQueryParser qp,String field,String query) throws ParseException { | |
35 if( field == null ) { | |
36 if( defaultFieldParser == null ) | |
37 throw new ParseException(qp,"no defaults were specified, so a field is required"); | |
38 if( defaultFields.length == 1 ) | |
39 return defaultFieldParser.getQuery(qp,defaultFields[0],query); | |
40 BooleanQuery bq = new BooleanQuery(); | |
41 for( String f : defaultFields ) { | |
42 bq.add( defaultFieldParser.getQuery(qp,f,query), BooleanClause.Occur.SHOULD ); | |
43 } | |
44 return bq; | |
45 } else { | |
46 FieldParser fp = fields.get(field); | |
47 if( fp != null ) | |
48 return fp.getQuery(qp,field,query); | |
49 if( allowUnspecifiedFields ) | |
50 return defaultFieldParser.getQuery(qp,field,query); | |
51 throw new ParseException(qp,"unrecognized field '"+field+"'"); | |
52 } | |
53 } | |
54 | |
55 @Override public Query getRangeQuery(SaneQueryParser qp,String field,String minQuery,String maxQuery,boolean includeMin,boolean includeMax) throws ParseException { | |
56 if( field == null ) { | |
57 if( defaultFieldParser == null ) | |
58 throw new ParseException(qp,"no defaults were specified, so a field is required"); | |
59 if( defaultFields.length == 1 ) | |
60 return defaultFieldParser.getRangeQuery(qp,defaultFields[0],minQuery,maxQuery,includeMin,includeMax); | |
61 BooleanQuery bq = new BooleanQuery(); | |
62 for( String f : defaultFields ) { | |
63 bq.add( defaultFieldParser.getRangeQuery(qp,f,minQuery,maxQuery,includeMin,includeMax), BooleanClause.Occur.SHOULD ); | |
64 } | |
65 return bq; | |
66 } else { | |
67 FieldParser fp = fields.get(field); | |
68 if( fp != null ) | |
69 return fp.getRangeQuery(qp,field,minQuery,maxQuery,includeMin,includeMax); | |
70 if( allowUnspecifiedFields ) | |
71 return defaultFieldParser.getRangeQuery(qp,field,minQuery,maxQuery,includeMin,includeMax); | |
72 throw new ParseException(qp,"field '"+field+"' not specified"); | |
73 } | |
74 } | |
75 | |
76 @Override public SortField getSortField(SaneQueryParser qp,String field,boolean reverse) throws ParseException { | |
77 FieldParser fp = fields.get(field); | |
78 if( fp != null ) | |
79 return fp.getSortField(qp,field,reverse); | |
80 if( allowUnspecifiedFields ) | |
81 return defaultFieldParser.getSortField(qp,field,reverse); | |
82 throw new ParseException(qp,"field '"+field+"' not specified"); | |
83 } | |
84 | |
85 } |