comparison src/luan/modules/lucene/queryparser/MultiFieldParser.java @ 775:1a68fc55a80c

simplify dir structure
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 26 Aug 2016 14:36:40 -0600
parents lucene/src/luan/modules/lucene/queryparser/MultiFieldParser.java@01e68da6983b
children 38a42f437fd2
comparison
equal deleted inserted replaced
774:3e30cf310e56 775:1a68fc55a80c
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 }