31
31
import java .util .Collection ;
32
32
import java .util .List ;
33
33
import java .util .Optional ;
34
+ import java .util .Set ;
34
35
import java .util .stream .Collectors ;
35
36
36
37
import org .springframework .data .elasticsearch .core .convert .GeoConverters ;
@@ -67,9 +68,13 @@ public static Optional<Query> createQuery(Criteria criteria) {
67
68
for (Criteria chainedCriteria : criteria .getCriteriaChain ()) {
68
69
69
70
if (chainedCriteria .isOr ()) {
70
- // todo #1973
71
+ BoolQuery .Builder boolQueryBuilder = QueryBuilders .bool ();
72
+ queriesForEntries (chainedCriteria ).forEach (boolQueryBuilder ::should );
73
+ filterQueries .add (new Query (boolQueryBuilder .build ()));
71
74
} else if (chainedCriteria .isNegating ()) {
72
- // todo #1973
75
+ Collection <? extends Query > negatingFilters = buildNegatingFilter (criteria .getField ().getName (),
76
+ criteria .getFilterCriteriaEntries ());
77
+ filterQueries .addAll (negatingFilters );
73
78
} else {
74
79
filterQueries .addAll (queriesForEntries (chainedCriteria ));
75
80
}
@@ -85,11 +90,28 @@ public static Optional<Query> createQuery(Criteria criteria) {
85
90
BoolQuery .Builder boolQueryBuilder = QueryBuilders .bool ();
86
91
filterQueries .forEach (boolQueryBuilder ::must );
87
92
BoolQuery boolQuery = boolQueryBuilder .build ();
88
- return Optional .of (boolQuery . _toQuery ( ));
93
+ return Optional .of (new Query ( boolQuery ));
89
94
}
90
95
}
91
96
}
92
97
98
+ private static Collection <? extends Query > buildNegatingFilter (String fieldName ,
99
+ Set <Criteria .CriteriaEntry > filterCriteriaEntries ) {
100
+
101
+ List <Query > negationFilters = new ArrayList <>();
102
+
103
+ filterCriteriaEntries .forEach (criteriaEntry -> {
104
+ Optional <Query > query = queryFor (criteriaEntry .getKey (), criteriaEntry .getValue (), fieldName );
105
+
106
+ if (query .isPresent ()) {
107
+ BoolQuery negatingFilter = QueryBuilders .bool ().mustNot (query .get ()).build ();
108
+ negationFilters .add (new Query (negatingFilter ));
109
+ }
110
+ });
111
+
112
+ return negationFilters ;
113
+ }
114
+
93
115
private static Collection <? extends Query > queriesForEntries (Criteria criteria ) {
94
116
95
117
Assert .notNull (criteria .getField (), "criteria must have a field" );
0 commit comments