mirror of
https://github.com/spring-projects/spring-data-elasticsearch.git
synced 2025-06-25 05:22:10 +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));
|
.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();
|
return queryBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,6 +316,9 @@ public class Criteria {
|
|||||||
Criteria orCriteria = new OrCriteria(this.criteriaChain, criteria.getField());
|
Criteria orCriteria = new OrCriteria(this.criteriaChain, criteria.getField());
|
||||||
orCriteria.queryCriteriaEntries.addAll(criteria.queryCriteriaEntries);
|
orCriteria.queryCriteriaEntries.addAll(criteria.queryCriteriaEntries);
|
||||||
orCriteria.filterCriteriaEntries.addAll(criteria.filterCriteriaEntries);
|
orCriteria.filterCriteriaEntries.addAll(criteria.filterCriteriaEntries);
|
||||||
|
orCriteria.subCriteria.addAll(criteria.subCriteria);
|
||||||
|
orCriteria.boost = criteria.boost;
|
||||||
|
orCriteria.negating = criteria.isNegating();
|
||||||
return orCriteria;
|
return orCriteria;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,4 +483,74 @@ class CriteriaQueryProcessorUnitTests {
|
|||||||
assertEquals(expected, queryString, false);
|
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