1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.query;
17
18 import java.io.IOException;
19 import java.util.Objects;
20
21 import org.apache.lucene.search.Query;
22 import org.opensearch.core.common.io.stream.StreamOutput;
23 import org.opensearch.core.xcontent.XContentBuilder;
24 import org.opensearch.index.query.BoolQueryBuilder;
25 import org.opensearch.index.query.DisMaxQueryBuilder;
26 import org.opensearch.index.query.QueryBuilder;
27 import org.opensearch.index.query.QueryBuilderVisitor;
28 import org.opensearch.index.query.QueryRewriteContext;
29 import org.opensearch.index.query.QueryShardContext;
30
31
32
33
34
35
36 public class DefaultQueryBuilder implements QueryBuilder {
37
38
39 private final QueryBuilder queryBuilder;
40
41
42 private final QueryType queryType;
43
44
45
46
47
48
49
50 public DefaultQueryBuilder(final QueryBuilder queryBuilder) {
51 this.queryBuilder = queryBuilder;
52 if (queryBuilder instanceof BoolQueryBuilder) {
53 queryType = QueryType.BOOL;
54 } else if (queryBuilder instanceof DisMaxQueryBuilder) {
55 queryType = QueryType.DISMAX;
56 } else {
57 throw new IllegalArgumentException("Unknown query builder: " + queryBuilder);
58 }
59 }
60
61
62
63
64
65
66
67
68
69 public DefaultQueryBuilder add(final QueryBuilder innerQueryBuilder) {
70 switch (queryType) {
71 case BOOL:
72 ((BoolQueryBuilder) queryBuilder).should(innerQueryBuilder);
73 break;
74 case DISMAX:
75 ((DisMaxQueryBuilder) queryBuilder).add(innerQueryBuilder);
76 break;
77 default:
78 break;
79 }
80 return this;
81 }
82
83
84
85
86 enum QueryType {
87
88 BOOL,
89
90 DISMAX;
91 }
92
93
94
95
96
97
98 @Override
99 public String getWriteableName() {
100 return queryBuilder.getWriteableName();
101 }
102
103
104
105
106
107
108
109
110 @Override
111 public Query toQuery(final QueryShardContext context) throws IOException {
112 return queryBuilder.toQuery(context);
113 }
114
115
116
117
118
119
120 @Override
121 public boolean isFragment() {
122 return queryBuilder.isFragment();
123 }
124
125
126
127
128
129
130
131 @Override
132 public QueryBuilder queryName(final String queryName) {
133 return queryBuilder.queryName(queryName);
134 }
135
136
137
138
139
140
141 @Override
142 public String queryName() {
143 return queryBuilder.queryName();
144 }
145
146
147
148
149
150
151 @Override
152 public float boost() {
153 return queryBuilder.boost();
154 }
155
156
157
158
159
160
161
162 @Override
163 public QueryBuilder boost(final float boost) {
164 return queryBuilder.boost(boost);
165 }
166
167
168
169
170
171
172
173 @Override
174 public QueryBuilder filter(QueryBuilder filter) {
175 return queryBuilder.filter(filter);
176 }
177
178
179
180
181
182
183 @Override
184 public String getName() {
185 return queryBuilder.getName();
186 }
187
188
189
190
191
192
193
194
195 @Override
196 public QueryBuilder rewrite(final QueryRewriteContext queryShardContext) throws IOException {
197 return queryBuilder.rewrite(queryShardContext);
198 }
199
200 @Override
201 public void visit(final QueryBuilderVisitor visitor) {
202 queryBuilder.visit(visitor);
203 }
204
205 @Override
206 public XContentBuilder toXContent(final XContentBuilder builder, final Params params) throws IOException {
207 return queryBuilder.toXContent(builder, params);
208 }
209
210 @Override
211 public void writeTo(final StreamOutput out) throws IOException {
212 queryBuilder.writeTo(out);
213 }
214
215 @Override
216 public int hashCode() {
217 return queryBuilder.hashCode();
218 }
219
220 @Override
221 public boolean equals(final Object obj) {
222 if (this == obj) {
223 return true;
224 }
225 if (obj == null || getClass() != obj.getClass()) {
226 return false;
227 }
228 final DefaultQueryBuilder other = (DefaultQueryBuilder) obj;
229 return Objects.equals(queryBuilder, other.queryBuilder);
230 }
231
232 @Override
233 public String toString() {
234 return queryBuilder.toString();
235 }
236
237 }