Skip to content

Commit 247df95

Browse files
committed
refactor: use double quotes for exact TEXT queries instead of escaping
1 parent b9d81d4 commit 247df95

File tree

4 files changed

+27
-5
lines changed

4 files changed

+27
-5
lines changed

redis-om-spring/src/main/java/com/redis/om/spring/search/stream/ExampleToNodeConverter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public Node processExample(Example<E> example, Node rootNode) {
9898
else if (schemaField instanceof TextField) {
9999
switch (example.getMatcher().getDefaultStringMatcher()) {
100100
case DEFAULT, EXACT -> rootNode = isNotEmpty(value) ?
101-
QueryBuilders.intersect(rootNode).add(fieldName, QueryUtils.escape(value.toString(), false)) :
101+
QueryBuilders.intersect(rootNode).add(fieldName, "\"" + value.toString() + "\"") :
102102
rootNode;
103103
case STARTING -> rootNode = isNotEmpty(value) ?
104104
QueryBuilders.intersect(rootNode).add(fieldName, QueryUtils.escape(value.toString(), false) + "*") :

redis-om-spring/src/main/java/com/redis/om/spring/search/stream/predicates/fulltext/EqualPredicate.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public T getValue() {
2222
@Override
2323
public Node apply(Node root) {
2424
return ObjectUtils.isNotEmpty(getValue()) ?
25-
QueryBuilders.intersect(root).add(getSearchAlias(), QueryUtils.escape(getValue().toString())) :
25+
QueryBuilders.intersect(root).add(getSearchAlias(), "\"" + getValue().toString() + "\"") :
2626
root;
2727
}
2828

redis-om-spring/src/main/java/com/redis/om/spring/search/stream/predicates/fulltext/NotEqualPredicate.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public T getValue() {
2424
public Node apply(Node root) {
2525
return ObjectUtils.isNotEmpty(getValue()) ?
2626
QueryBuilders.intersect(root).add(
27-
QueryBuilders.disjunct(getSearchAlias(), Values.value(QueryUtils.escape(getValue().toString(), true)))) :
27+
QueryBuilders.disjunct(getSearchAlias(), Values.value("\"" + getValue().toString() + "\""))) :
2828
root;
2929
}
3030

tests/src/test/java/com/redis/om/spring/search/stream/EntityStreamDocumentQBEAdvancedTest.java

+24-2
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,6 @@ void testExactCustomerMatcherPattern() {
173173
.filter(example)
174174
.collect(Collectors.toList());
175175

176-
System.out.println("Results with orBetweenParameters=" + orBetweenParameters + ": " + results.size());
177-
178176
// Log the results for debugging
179177
for (DunnageEntity result : results) {
180178
System.out.println(" Match: " + result.getDunnageCode() +
@@ -204,6 +202,30 @@ void testExactCustomerMatcherPattern() {
204202
}
205203
}
206204

205+
@Test
206+
void testSearchWithExactTextValue() {
207+
DunnageEntity template = DunnageEntity.builder()
208+
.material("CORREX + EPP")
209+
.build();
210+
211+
ExampleMatcher matcher = ExampleMatcher.matching()
212+
.withStringMatcher(StringMatcher.EXACT)
213+
.withIgnoreCase()
214+
.withIgnoreNullValues();
215+
216+
Example<DunnageEntity> example = Example.of(template, matcher);
217+
218+
// Using entity stream
219+
List<DunnageEntity> results = entityStream.of(DunnageEntity.class)
220+
.dialect(2)
221+
.filter(example)
222+
.collect(Collectors.toList());
223+
224+
// Should find entries with "FOAM" in description field despite case difference
225+
assertThat(results).hasSize(1);
226+
assertThat(results).extracting("dunnageCode").containsExactly("F375");
227+
}
228+
207229
private DunnageEntity createDunnageEntity(String plant, String dunnageCode, String dunnageSuppcode,
208230
String dunnageSupplier, String material, String description,
209231
Integer weight, Float unitCost, String currency,

0 commit comments

Comments
 (0)