1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.opensearch.query;
17
18 import java.io.IOException;
19 import java.util.List;
20 import java.util.Map;
21 import java.util.Objects;
22
23 import org.apache.lucene.search.Query;
24 import org.opensearch.core.ParseField;
25 import org.opensearch.core.common.io.stream.NamedWriteable;
26 import org.opensearch.core.common.io.stream.StreamOutput;
27 import org.opensearch.core.xcontent.ObjectParser;
28 import org.opensearch.core.xcontent.XContentBuilder;
29 import org.opensearch.core.xcontent.XContentParser;
30 import org.opensearch.index.query.AbstractQueryBuilder;
31 import org.opensearch.index.query.QueryBuilder;
32 import org.opensearch.index.query.QueryShardContext;
33
34
35
36
37
38
39 public class StoredLtrQueryBuilder extends AbstractQueryBuilder<StoredLtrQueryBuilder> implements NamedWriteable {
40
41 public static final String NAME = "sltr";
42
43
44 public static final ParseField MODEL_NAME = new ParseField("model");
45
46 public static final ParseField FEATURESET_NAME = new ParseField("featureset");
47
48 public static final ParseField STORE_NAME = new ParseField("store");
49
50 public static final ParseField PARAMS = new ParseField("params");
51
52 public static final ParseField ACTIVE_FEATURES = new ParseField("active_features");
53 private static final ObjectParser<StoredLtrQueryBuilder, Void> PARSER;
54
55 static {
56 PARSER = new ObjectParser<>(NAME);
57 PARSER.declareString(StoredLtrQueryBuilder::modelName, MODEL_NAME);
58 PARSER.declareString(StoredLtrQueryBuilder::featureSetName, FEATURESET_NAME);
59 PARSER.declareString(StoredLtrQueryBuilder::storeName, STORE_NAME);
60 PARSER.declareField(StoredLtrQueryBuilder::params, XContentParser::map, PARAMS, ObjectParser.ValueType.OBJECT);
61 PARSER.declareStringArray(StoredLtrQueryBuilder::activeFeatures, ACTIVE_FEATURES);
62 PARSER.declareFloat(QueryBuilder::boost, AbstractQueryBuilder.BOOST_FIELD);
63 PARSER.declareString(QueryBuilder::queryName, AbstractQueryBuilder.NAME_FIELD);
64 }
65
66 private String modelName;
67 private String featureSetName;
68 private String storeName;
69 private Map<String, Object> params;
70 private List<String> activeFeatures;
71
72
73
74
75 public StoredLtrQueryBuilder() {
76
77 }
78
79 @Override
80 public String getWriteableName() {
81 return NAME;
82 }
83
84 @Override
85 protected void doWriteTo(final StreamOutput out) throws IOException {
86 out.writeOptionalString(modelName);
87 out.writeOptionalString(featureSetName);
88 out.writeMap(params);
89 out.writeOptionalStringArray(activeFeatures != null ? activeFeatures.toArray(new String[0]) : null);
90 out.writeOptionalString(storeName);
91 }
92
93 @Override
94 protected void doXContent(final XContentBuilder builder, final Params params) throws IOException {
95 builder.startObject(NAME);
96 if (modelName != null) {
97 builder.field(MODEL_NAME.getPreferredName(), modelName);
98 }
99 if (featureSetName != null) {
100 builder.field(FEATURESET_NAME.getPreferredName(), featureSetName);
101 }
102 if (storeName != null) {
103 builder.field(STORE_NAME.getPreferredName(), storeName);
104 }
105 if (this.params != null && !this.params.isEmpty()) {
106 builder.field(PARAMS.getPreferredName(), this.params);
107 }
108 if (activeFeatures != null && !activeFeatures.isEmpty()) {
109 builder.field(ACTIVE_FEATURES.getPreferredName(), activeFeatures);
110 }
111 printBoostAndQueryName(builder);
112 builder.endObject();
113 }
114
115 @Override
116 protected Query doToQuery(final QueryShardContext context) throws IOException {
117 throw new UnsupportedOperationException("Query processing is not supported.");
118 }
119
120 @Override
121 protected boolean doEquals(final StoredLtrQueryBuilder other) {
122 return Objects.equals(modelName, other.modelName) && Objects.equals(featureSetName, other.featureSetName)
123 && Objects.equals(storeName, other.storeName) && Objects.equals(params, other.params)
124 && Objects.equals(activeFeatures, other.activeFeatures);
125 }
126
127 @Override
128 protected int doHashCode() {
129 return Objects.hash(modelName, featureSetName, storeName, params, activeFeatures);
130 }
131
132
133
134
135
136
137 public String modelName() {
138 return modelName;
139 }
140
141
142
143
144
145
146
147 public StoredLtrQueryBuilder modelName(final String modelName) {
148 this.modelName = Objects.requireNonNull(modelName);
149 return this;
150 }
151
152
153
154
155
156
157 public String featureSetName() {
158 return featureSetName;
159 }
160
161
162
163
164
165
166
167 public StoredLtrQueryBuilder featureSetName(final String featureSetName) {
168 this.featureSetName = featureSetName;
169 return this;
170 }
171
172
173
174
175
176
177 public String storeName() {
178 return storeName;
179 }
180
181
182
183
184
185
186
187 public StoredLtrQueryBuilder storeName(final String storeName) {
188 this.storeName = storeName;
189 return this;
190 }
191
192
193
194
195
196
197 public Map<String, Object> params() {
198 return params;
199 }
200
201
202
203
204
205
206
207 public StoredLtrQueryBuilder params(final Map<String, Object> params) {
208 this.params = Objects.requireNonNull(params);
209 return this;
210 }
211
212
213
214
215
216
217 public List<String> activeFeatures() {
218 return activeFeatures;
219 }
220
221
222
223
224
225
226
227 public StoredLtrQueryBuilder activeFeatures(final List<String> activeFeatures) {
228 this.activeFeatures = Objects.requireNonNull(activeFeatures);
229 return this;
230 }
231 }