@@ -65,16 +65,10 @@ private ElasticsearchBooleanPredicate(Builder builder) {
65
65
66
66
@ Override
67
67
public void checkNestableWithin (PredicateNestingContext context ) {
68
- // For Elasticsearch backend only:
69
- // If this method is called that means we are trying to pass a bool predicate as a clause/filter/etc to some other predicate
70
- // and that would mean that if our current bool predicate has a knn should clause -- it is not ok to continue,
71
- // since it will place a knn clause deeper than a should clause of a top level bool predicate, which is not acceptable.
72
- // Because of that we are making sure that the context we pass in to check the clauses is updated:
73
- PredicateNestingContext updatedContext = context .rejectKnn ();
74
- checkAcceptableWithin ( updatedContext , mustClauses );
75
- checkAcceptableWithin ( updatedContext , shouldClauses );
76
- checkAcceptableWithin ( updatedContext , filterClauses );
77
- checkAcceptableWithin ( updatedContext , mustNotClauses );
68
+ checkAcceptableWithin ( context , mustClauses );
69
+ checkAcceptableWithin ( context , shouldClauses );
70
+ checkAcceptableWithin ( context , filterClauses );
71
+ checkAcceptableWithin ( context , mustNotClauses );
78
72
}
79
73
80
74
@ Override
@@ -116,15 +110,7 @@ private void contributeClauses(PredicateRequestContext context, JsonObject inner
116
110
}
117
111
118
112
for ( ElasticsearchSearchPredicate clause : clauses ) {
119
- JsonObject jsonQuery = clause .toJsonQuery ( context );
120
- if ( jsonQuery != null ) {
121
- // This is an exceptional case for a KNN search on Elasticsearch distribution.
122
- // A Knn predicate would contribute to a knn clause inside the request context itself,
123
- // and we do not want to add this json as a clause to the bool predicate.
124
- // Hence, when the predicate returns null as JSON query and we ignore it.
125
-
126
- GsonUtils .setOrAppendToArray ( innerObject , occurProperty , jsonQuery );
127
- }
113
+ GsonUtils .setOrAppendToArray ( innerObject , occurProperty , clause .toJsonQuery ( context ) );
128
114
}
129
115
}
130
116
@@ -221,10 +207,8 @@ public void must(SearchPredicate clause) {
221
207
mustClauses = new ArrayList <>();
222
208
}
223
209
ElasticsearchSearchPredicate elasticsearchClause = ElasticsearchSearchPredicate .from ( scope , clause );
224
- elasticsearchClause .checkNestableWithin ( PredicateNestingContext .doesNotAcceptKnn () );
210
+ elasticsearchClause .checkNestableWithin ( PredicateNestingContext .simple () );
225
211
mustClauses .add ( elasticsearchClause );
226
-
227
- checkShouldClausesForKnnAcceptability ();
228
212
}
229
213
230
214
@ Override
@@ -233,23 +217,17 @@ public void mustNot(SearchPredicate clause) {
233
217
mustNotClauses = new ArrayList <>();
234
218
}
235
219
ElasticsearchSearchPredicate elasticsearchClause = ElasticsearchSearchPredicate .from ( scope , clause );
236
- elasticsearchClause .checkNestableWithin ( PredicateNestingContext .doesNotAcceptKnn () );
220
+ elasticsearchClause .checkNestableWithin ( PredicateNestingContext .simple () );
237
221
mustNotClauses .add ( elasticsearchClause );
238
-
239
- checkShouldClausesForKnnAcceptability ();
240
222
}
241
223
242
224
@ Override
243
225
public void should (SearchPredicate clause ) {
244
226
if ( shouldClauses == null ) {
245
227
shouldClauses = new ArrayList <>();
246
228
}
247
-
248
229
ElasticsearchSearchPredicate elasticsearchClause = ElasticsearchSearchPredicate .from ( scope , clause );
249
- elasticsearchClause .checkNestableWithin (
250
- !hasNonShouldClause ()
251
- ? PredicateNestingContext .acceptsKnn ()
252
- : PredicateNestingContext .doesNotAcceptKnn () );
230
+ elasticsearchClause .checkNestableWithin ( PredicateNestingContext .simple () );
253
231
shouldClauses .add ( elasticsearchClause );
254
232
}
255
233
@@ -259,10 +237,8 @@ public void filter(SearchPredicate clause) {
259
237
filterClauses = new ArrayList <>();
260
238
}
261
239
ElasticsearchSearchPredicate elasticsearchClause = ElasticsearchSearchPredicate .from ( scope , clause );
262
- elasticsearchClause .checkNestableWithin ( PredicateNestingContext .doesNotAcceptKnn () );
240
+ elasticsearchClause .checkNestableWithin ( PredicateNestingContext .simple () );
263
241
filterClauses .add ( elasticsearchClause );
264
-
265
- checkShouldClausesForKnnAcceptability ();
266
242
}
267
243
268
244
@ Override
@@ -351,20 +327,6 @@ private void optimizeClauseCollection(List<ElasticsearchSearchPredicate> collect
351
327
}
352
328
}
353
329
354
- /*
355
- * For Elasticsearch backend only:
356
- * It may be that we've added knn should clauses and all was fine.
357
- * But now we are adding to such bool predicate a non-should clause.
358
- * We want to make sure that in such case there are no knn clauses in should or fail.
359
- * OpenSearch backend will not be affected by these checks.
360
- */
361
- private void checkShouldClausesForKnnAcceptability () {
362
- if ( shouldClauses != null ) {
363
- shouldClauses .forEach (
364
- should -> should .checkNestableWithin ( PredicateNestingContext .doesNotAcceptKnn () ) );
365
- }
366
- }
367
-
368
330
private void checkAndClearClauseCollections () {
369
331
if ( mustClauses != null && mustClauses .isEmpty () ) {
370
332
mustClauses = null ;
@@ -378,10 +340,6 @@ private boolean hasAtLeastOneMustOrFilterPredicate() {
378
340
return mustClauses != null || filterClauses != null ;
379
341
}
380
342
381
- private boolean hasNonShouldClause () {
382
- return mustClauses != null || filterClauses != null || mustNotClauses != null ;
383
- }
384
-
385
343
private boolean hasOnlyOneMustClause () {
386
344
return mustClauses != null
387
345
&& mustClauses .size () == 1
0 commit comments