mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-22 20:12:11 +00:00
Wrap the OrCriteria correctly.
Original Pull Request #2855 Closes #2854
This commit is contained in:
parent
c965862e82
commit
7a8a9a15f1
@ -174,6 +174,12 @@ class CriteriaQueryProcessor {
|
||||
.scoreMode(ChildScoreMode.Avg));
|
||||
}
|
||||
|
||||
if (criteria.isNegating() && criteria.isOr()) {
|
||||
final Query query = queryBuilder.build();
|
||||
queryBuilder = new Query.Builder();
|
||||
queryBuilder.bool(mnqb -> mnqb.mustNot(query));
|
||||
}
|
||||
|
||||
return queryBuilder.build();
|
||||
}
|
||||
|
||||
|
@ -316,6 +316,9 @@ public class Criteria {
|
||||
Criteria orCriteria = new OrCriteria(this.criteriaChain, criteria.getField());
|
||||
orCriteria.queryCriteriaEntries.addAll(criteria.queryCriteriaEntries);
|
||||
orCriteria.filterCriteriaEntries.addAll(criteria.filterCriteriaEntries);
|
||||
orCriteria.subCriteria.addAll(criteria.subCriteria);
|
||||
orCriteria.boost = criteria.boost;
|
||||
orCriteria.negating = criteria.isNegating();
|
||||
return orCriteria;
|
||||
}
|
||||
|
||||
|
@ -483,4 +483,74 @@ class CriteriaQueryProcessorUnitTests {
|
||||
assertEquals(expected, queryString, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldWrapOrCriteria() throws JSONException {
|
||||
// Given
|
||||
String expected = """
|
||||
{
|
||||
"bool": {
|
||||
"should": [
|
||||
{
|
||||
"query_string": {
|
||||
"analyze_wildcard": true,
|
||||
"fields": [
|
||||
"field1"
|
||||
],
|
||||
"query": "*xyz*"
|
||||
}
|
||||
},
|
||||
{
|
||||
"bool": {
|
||||
"must_not": [
|
||||
{
|
||||
"query_string": {
|
||||
"boost": 1.5,
|
||||
"default_operator": "and",
|
||||
"fields": [
|
||||
"field1"
|
||||
],
|
||||
"query": "abc"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"bool": {
|
||||
"must": [
|
||||
{
|
||||
"query_string": {
|
||||
"analyze_wildcard": true,
|
||||
"fields": [
|
||||
"field2"
|
||||
],
|
||||
"query": "elastic*"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
""";
|
||||
|
||||
Criteria criteria = Criteria.where("field1")
|
||||
.contains("xyz")
|
||||
.or(
|
||||
Criteria.where("field1")
|
||||
.is("abc").not()
|
||||
.boost(1.5f)
|
||||
.subCriteria(
|
||||
Criteria.where("field2")
|
||||
.startsWith("elastic")
|
||||
)
|
||||
);
|
||||
|
||||
// Then
|
||||
String queryString = queryToJson(CriteriaQueryProcessor.createQuery(criteria), mapper);
|
||||
|
||||
assertEquals(expected, queryString, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user