1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.entity;
17
18 import static org.codelibs.core.stream.StreamUtil.stream;
19
20 import java.util.Locale;
21 import java.util.Map;
22
23 import org.codelibs.core.lang.StringUtil;
24 import org.codelibs.fess.util.ComponentUtil;
25
26 import jakarta.servlet.http.HttpServletRequest;
27
28
29
30
31 public abstract class SearchRequestParams {
32
33
34
35
36 protected SearchRequestParams() {
37
38 }
39
40
41 public static final String AS_NQ = "nq";
42
43
44 public static final String AS_OQ = "oq";
45
46
47 public static final String AS_EPQ = "epq";
48
49
50 public static final String AS_Q = "q";
51
52
53 public static final String AS_FILETYPE = "filetype";
54
55
56 public static final String AS_SITESEARCH = "sitesearch";
57
58
59 public static final String AS_OCCURRENCE = "occt";
60
61
62 public static final String AS_TIMESTAMP = "timestamp";
63
64
65
66
67
68
69 public abstract String getQuery();
70
71
72
73
74
75
76 public abstract Map<String, String[]> getFields();
77
78
79
80
81
82
83 public abstract Map<String, String[]> getConditions();
84
85
86
87
88
89
90 public abstract String[] getLanguages();
91
92
93
94
95
96
97 public abstract GeoInfo getGeoInfo();
98
99
100
101
102
103
104 public abstract FacetInfo getFacetInfo();
105
106
107
108
109
110
111 public abstract HighlightInfo getHighlightInfo();
112
113
114
115
116
117
118 public abstract String getSort();
119
120
121
122
123
124
125 public abstract int getStartPosition();
126
127
128
129
130
131
132 public abstract int getPageSize();
133
134
135
136
137
138
139 public abstract int getOffset();
140
141
142
143
144
145
146 public abstract String[] getExtraQueries();
147
148
149
150
151
152
153
154 public abstract Object getAttribute(String name);
155
156
157
158
159
160
161 public abstract Locale getLocale();
162
163
164
165
166
167
168 public abstract SearchRequestType getType();
169
170
171
172
173
174
175 public abstract String getSimilarDocHash();
176
177
178
179
180
181
182 public String getTrackTotalHits() {
183 return null;
184 }
185
186
187
188
189
190
191 public Float getMinScore() {
192 return null;
193 }
194
195
196
197
198
199
200 public boolean hasConditionQuery() {
201 final Map<String, String[]> conditions = getConditions();
202 return !isEmptyArray(conditions.get(AS_Q))
203 || !isEmptyArray(conditions.get(AS_EPQ))
204 || !isEmptyArray(conditions.get(AS_OQ))
205 || !isEmptyArray(conditions.get(AS_NQ))
206 || !isEmptyArray(conditions.get(AS_TIMESTAMP))
207 || !isEmptyArray(conditions.get(AS_SITESEARCH))
208 || !isEmptyArray(conditions.get(AS_FILETYPE));
209 }
210
211
212
213
214
215
216
217 protected boolean isEmptyArray(final String[] values) {
218 if (values == null || values.length == 0) {
219 return true;
220 }
221 return stream(values).get(stream -> stream.allMatch(StringUtil::isBlank));
222 }
223
224
225
226
227
228
229
230 protected static String[] simplifyArray(final String[] values) {
231 return stream(values).get(stream -> stream.filter(StringUtil::isNotBlank).distinct().toArray(n -> new String[n]));
232 }
233
234
235
236
237
238
239
240
241 public static String[] getParamValueArray(final HttpServletRequest request, final String param) {
242 return simplifyArray(request.getParameterValues(param));
243 }
244
245
246
247
248
249
250
251 protected FacetInfo createFacetInfo(final HttpServletRequest request) {
252 final String[] fields = getParamValueArray(request, "facet.field");
253 final String[] queries = getParamValueArray(request, "facet.query");
254 if (fields.length == 0 && queries.length == 0) {
255 return null;
256 }
257 final FacetInfo facetInfo = new FacetInfo();
258 facetInfo.field = fields;
259 facetInfo.query = queries;
260 final String sizeStr = request.getParameter("facet.size");
261 if (StringUtil.isNotBlank(sizeStr)) {
262 facetInfo.size = Integer.parseInt(sizeStr);
263 }
264 final String minDocCountStr = request.getParameter("facet.minDocCount");
265 if (StringUtil.isNotBlank(minDocCountStr)) {
266 facetInfo.minDocCount = Long.parseLong(minDocCountStr);
267 }
268 final String sort = request.getParameter("facet.sort");
269 if (StringUtil.isNotBlank(sort)) {
270 facetInfo.sort = sort;
271 }
272 final String missing = request.getParameter("facet.missing");
273 if (StringUtil.isNotBlank(missing)) {
274 facetInfo.missing = missing;
275 }
276 return facetInfo;
277 }
278
279
280
281
282
283
284
285 protected GeoInfo createGeoInfo(final HttpServletRequest request) {
286 return new GeoInfo(request);
287 }
288
289
290
291
292 public enum SearchRequestType {
293
294 SEARCH,
295
296 ADMIN_SEARCH,
297
298 JSON,
299
300 GSA,
301
302 SUGGEST;
303 }
304
305
306
307
308
309
310 public String[] getResponseFields() {
311 return ComponentUtil.getQueryFieldConfig().getResponseFields();
312 }
313 }