15
15
*/
16
16
package org .springframework .data .solr .core ;
17
17
18
+ import static org .apache .solr .common .params .CommonParams .DF ;
19
+ import static org .apache .solr .common .params .DisMaxParams .ALTQ ;
20
+ import static org .apache .solr .common .params .DisMaxParams .BF ;
21
+ import static org .apache .solr .common .params .DisMaxParams .BQ ;
22
+ import static org .apache .solr .common .params .DisMaxParams .MM ;
23
+ import static org .apache .solr .common .params .DisMaxParams .PF ;
24
+ import static org .apache .solr .common .params .DisMaxParams .PS ;
25
+ import static org .apache .solr .common .params .DisMaxParams .QS ;
26
+ import static org .apache .solr .common .params .DisMaxParams .TIE ;
27
+ import static org .apache .solr .common .params .SimpleParams .QF ;
28
+
18
29
import java .util .ArrayList ;
19
30
import java .util .Collection ;
20
31
import java .util .List ;
21
32
import java .util .Map .Entry ;
22
-
23
33
import org .apache .commons .lang3 .StringUtils ;
24
34
import org .apache .solr .client .solrj .SolrQuery ;
25
35
import org .apache .solr .client .solrj .SolrQuery .ORDER ;
35
45
import org .springframework .data .domain .Sort ;
36
46
import org .springframework .data .domain .Sort .Order ;
37
47
import org .springframework .data .mapping .context .MappingContext ;
38
- import org .springframework .data .solr .core .query .*;
39
- import org .springframework .data .solr .core .query .Criteria .Predicate ;
48
+ import org .springframework .data .solr .core .query .Criteria ;
49
+ import org .springframework .data .solr .core .query .DisMaxOptions ;
50
+ import org .springframework .data .solr .core .query .DisMaxQuery ;
51
+ import org .springframework .data .solr .core .query .FacetOptions ;
40
52
import org .springframework .data .solr .core .query .FacetOptions .FacetParameter ;
41
53
import org .springframework .data .solr .core .query .FacetOptions .FieldWithDateRangeParameters ;
42
54
import org .springframework .data .solr .core .query .FacetOptions .FieldWithFacetParameters ;
43
55
import org .springframework .data .solr .core .query .FacetOptions .FieldWithNumericRangeParameters ;
44
56
import org .springframework .data .solr .core .query .FacetOptions .FieldWithRangeParameters ;
57
+ import org .springframework .data .solr .core .query .FacetQuery ;
58
+ import org .springframework .data .solr .core .query .Field ;
59
+ import org .springframework .data .solr .core .query .FilterQuery ;
60
+ import org .springframework .data .solr .core .query .Function ;
45
61
import org .springframework .data .solr .core .query .Function .Context .Target ;
62
+ import org .springframework .data .solr .core .query .GroupOptions ;
63
+ import org .springframework .data .solr .core .query .HighlightOptions ;
46
64
import org .springframework .data .solr .core .query .HighlightOptions .FieldWithHighlightParameters ;
47
65
import org .springframework .data .solr .core .query .HighlightOptions .HighlightParameter ;
66
+ import org .springframework .data .solr .core .query .HighlightQuery ;
67
+ import org .springframework .data .solr .core .query .PivotField ;
68
+ import org .springframework .data .solr .core .query .Query ;
69
+ import org .springframework .data .solr .core .query .QueryParameter ;
70
+ import org .springframework .data .solr .core .query .SolrDataQuery ;
71
+ import org .springframework .data .solr .core .query .SpellcheckOptions ;
72
+ import org .springframework .data .solr .core .query .StatsOptions ;
48
73
import org .springframework .lang .Nullable ;
49
74
import org .springframework .util .Assert ;
50
75
import org .springframework .util .CollectionUtils ;
65
90
* @author Joachim Uhrlaß
66
91
* @author Petar Tahchiev
67
92
* @author Juan Manuel de Blas
93
+ * @author Matthew Hall
68
94
*/
69
95
public class DefaultQueryParser extends QueryParserBase <SolrDataQuery > {
70
96
@@ -109,6 +135,10 @@ public final SolrQuery doConstructSolrQuery(SolrDataQuery query, @Nullable Class
109
135
processHighlightOptions (solrQuery , (HighlightQuery ) query , domainType );
110
136
}
111
137
138
+ if (query instanceof DisMaxQuery ) {
139
+ processDisMaxOptions (solrQuery , (DisMaxQuery ) query );
140
+ }
141
+
112
142
return solrQuery ;
113
143
}
114
144
@@ -132,6 +162,38 @@ private void processQueryOptions(SolrQuery solrQuery, Query query, @Nullable Cla
132
162
LOGGER .debug ("Constructed SolrQuery:\r \n {}" , solrQuery );
133
163
}
134
164
165
+ protected void processDisMaxOptions (SolrQuery solrQuery , DisMaxQuery disMaxQuery ) {
166
+
167
+ if (disMaxQuery == null || disMaxQuery .getDisMaxOptions () == null ) {
168
+ return ;
169
+ }
170
+
171
+ DisMaxOptions disMaxOptions = disMaxQuery .getDisMaxOptions ();
172
+
173
+ solrQuery .set ("defType" , "dismax" );
174
+
175
+ setSolrParamIfPresent (solrQuery , DF , disMaxOptions .getDefaultField ());
176
+
177
+ setSolrParamIfPresent (solrQuery , ALTQ , disMaxOptions .getAltQuery ());
178
+ setSolrParamIfPresent (solrQuery , QF , disMaxOptions .getQueryFunction ());
179
+ setSolrParamIfPresent (solrQuery , MM , disMaxOptions .getMinimumMatch ());
180
+
181
+ setSolrParamIfPresent (solrQuery , BQ , disMaxOptions .getBoostQuery ());
182
+ setSolrParamIfPresent (solrQuery , BF , disMaxOptions .getBoostFunction ());
183
+ setSolrParamIfPresent (solrQuery , PF , disMaxOptions .getPhraseFunction ());
184
+
185
+ setSolrParamIfPresent (solrQuery , PS , disMaxOptions .getPhraseSlop () == null ? null :
186
+ String .valueOf (disMaxOptions .getPhraseSlop ()));
187
+ setSolrParamIfPresent (solrQuery , QS , disMaxOptions .getQuerySlop () == null ? null : String .valueOf (disMaxOptions .getQuerySlop ()));
188
+ setSolrParamIfPresent (solrQuery , TIE , disMaxOptions .getTie () == null ? null : String .valueOf (disMaxOptions .getTie ()));
189
+ }
190
+
191
+ private static void setSolrParamIfPresent (SolrQuery solrQuery , String param , String value ) {
192
+ if (!org .springframework .util .StringUtils .isEmpty (value )) {
193
+ solrQuery .setParam (param , value );
194
+ }
195
+ }
196
+
135
197
private void processFacetOptions (SolrQuery solrQuery , FacetQuery query , @ Nullable Class <?> domainType ) {
136
198
137
199
if (enableFaceting (solrQuery , query )) {
0 commit comments