From 5fab5f80d180ac8ac2d970aee4ea221130a326b6 Mon Sep 17 00:00:00 2001 From: M Sazzadul Hoque <7600764+sazzad16@users.noreply.github.com> Date: Thu, 13 Jun 2024 18:23:24 +0600 Subject: [PATCH 1/4] Support RediSearch DIALECT 5 (#3831) - [x] Avoid escaping at query time - [ ] Alias for tag fields (EXACT) - [x] Avoid repeating for numeral equality - [x] New dialect (5) --- .../clients/jedis/search/querybuilder/Values.java | 4 ++++ .../clients/jedis/modules/search/SearchTest.java | 13 +++++++++++++ .../modules/search/SearchWithParamsTest.java | 15 +++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/src/main/java/redis/clients/jedis/search/querybuilder/Values.java b/src/main/java/redis/clients/jedis/search/querybuilder/Values.java index 67256f2359..7b4971be19 100644 --- a/src/main/java/redis/clients/jedis/search/querybuilder/Values.java +++ b/src/main/java/redis/clients/jedis/search/querybuilder/Values.java @@ -41,10 +41,14 @@ public static RangeValue between(int from, int to) { return new LongRangeValue(from, to); } + // TODO: change to simpler [d] available since RedisStack 7.4.0-rc1; + // currently kept for backward compatibility public static RangeValue eq(double d) { return new DoubleRangeValue(d, d); } + // TODO: change to simpler [i] available since RedisStack 7.4.0-rc1; + // currently kept for backward compatibility public static RangeValue eq(int i) { return new LongRangeValue(i, i); } diff --git a/src/test/java/redis/clients/jedis/modules/search/SearchTest.java b/src/test/java/redis/clients/jedis/modules/search/SearchTest.java index 27f72483db..6fc9bcadf7 100644 --- a/src/test/java/redis/clients/jedis/modules/search/SearchTest.java +++ b/src/test/java/redis/clients/jedis/modules/search/SearchTest.java @@ -412,6 +412,9 @@ public void testQueryParams() { Query query = new Query("@numval:[$min $max]").addParam("min", 1).addParam("max", 2).dialect(2); assertEquals(2, client.ftSearch(index, query).getTotalResults()); + + query = new Query("@numval:[$eq]").addParam("eq", 2).dialect(5); + assertEquals(1, client.ftSearch(index, query).getTotalResults()); } @Test @@ -532,6 +535,14 @@ public void testJsonWithAlias() { res = client.ftSearch(index, new Query("@num:[0 10]")); assertEquals(1, res.getTotalResults()); assertEquals("king:2", res.getDocuments().get(0).getId()); + + res = client.ftSearch(index, new Query("@num:[42 42]")); + assertEquals(1, res.getTotalResults()); + assertEquals("king:1", res.getDocuments().get(0).getId()); + + res = client.ftSearch(index, new Query("@num:[42]").dialect(5)); + assertEquals(1, res.getTotalResults()); + assertEquals("king:1", res.getDocuments().get(0).getId()); } @Test @@ -773,6 +784,7 @@ public void getTagField() { assertEquals(1, client.ftSearch(index, new Query("@category:{yellow}")).getTotalResults()); assertEquals(0, client.ftSearch(index, new Query("@category:{purple}")).getTotalResults()); assertEquals(1, client.ftSearch(index, new Query("@category:{orange\\;purple}")).getTotalResults()); + assertEquals(1, client.ftSearch(index, new Query("@category:{orange;purple}").dialect(5)).getTotalResults()); assertEquals(4, client.ftSearch(index, new Query("hello")).getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange;purple")), @@ -814,6 +826,7 @@ public void testGetTagFieldWithNonDefaultSeparator() { assertEquals(1, client.ftSearch(index, new Query("hello @category:{yellow}")).getTotalResults()); assertEquals(0, client.ftSearch(index, new Query("@category:{purple}")).getTotalResults()); assertEquals(1, client.ftSearch(index, new Query("@category:{orange\\,purple}")).getTotalResults()); + assertEquals(1, client.ftSearch(index, new Query("@category:{orange,purple}").dialect(5)).getTotalResults()); assertEquals(4, client.ftSearch(index, new Query("hello")).getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange,purple")), diff --git a/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java b/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java index 2a60dec21f..3cd6bca1c6 100644 --- a/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java +++ b/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java @@ -608,6 +608,9 @@ public void testQueryParams() { assertEquals(2, client.ftSearch(index, "@numval:[$min $max]", FTSearchParams.searchParams().params(paramValues) .dialect(2)).getTotalResults()); + + assertEquals(1, client.ftSearch(index, "@numval:[$eq]", + FTSearchParams.searchParams().addParam("eq", 2).dialect(5)).getTotalResults()); } @Test @@ -665,6 +668,14 @@ public void testJsonWithAlias() { res = client.ftSearch(index, "@num:[0 10]"); assertEquals(1, res.getTotalResults()); assertEquals("king:2", res.getDocuments().get(0).getId()); + + res = client.ftSearch(index, "@num:[42 42]", FTSearchParams.searchParams()); + assertEquals(1, res.getTotalResults()); + assertEquals("king:1", res.getDocuments().get(0).getId()); + + res = client.ftSearch(index, "@num:[42]", FTSearchParams.searchParams().dialect(5)); + assertEquals(1, res.getTotalResults()); + assertEquals("king:1", res.getDocuments().get(0).getId()); } @Test @@ -868,6 +879,8 @@ public void getTagField() { assertEquals(1, client.ftSearch(index, "@category:{yellow}").getTotalResults()); assertEquals(0, client.ftSearch(index, "@category:{purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange\\;purple}").getTotalResults()); + assertEquals(1, client.ftSearch(index, "@category:{orange;purple}", + FTSearchParams.searchParams().dialect(5)).getTotalResults()); assertEquals(4, client.ftSearch(index, "hello").getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange;purple")), @@ -907,6 +920,8 @@ public void testGetTagFieldWithNonDefaultSeparator() { assertEquals(1, client.ftSearch(index, "hello @category:{yellow}").getTotalResults()); assertEquals(0, client.ftSearch(index, "@category:{purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange\\,purple}").getTotalResults()); + assertEquals(1, client.ftSearch(index, "@category:{orange,purple}", + FTSearchParams.searchParams().dialect(5)).getTotalResults()); assertEquals(4, client.ftSearch(index, "hello").getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange,purple")), From 01cd64493a4b0d7ec22923886033a01980306883 Mon Sep 17 00:00:00 2001 From: M Sazzadul Hoque <7600764+sazzad16@users.noreply.github.com> Date: Thu, 11 Jul 2024 09:00:40 +0600 Subject: [PATCH 2/4] Checking if DIALECT 4 got the updates --- .../redis/clients/jedis/modules/search/SearchTest.java | 8 ++++---- .../jedis/modules/search/SearchWithParamsTest.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/test/java/redis/clients/jedis/modules/search/SearchTest.java b/src/test/java/redis/clients/jedis/modules/search/SearchTest.java index 6fc9bcadf7..8feeb014b2 100644 --- a/src/test/java/redis/clients/jedis/modules/search/SearchTest.java +++ b/src/test/java/redis/clients/jedis/modules/search/SearchTest.java @@ -413,7 +413,7 @@ public void testQueryParams() { Query query = new Query("@numval:[$min $max]").addParam("min", 1).addParam("max", 2).dialect(2); assertEquals(2, client.ftSearch(index, query).getTotalResults()); - query = new Query("@numval:[$eq]").addParam("eq", 2).dialect(5); + query = new Query("@numval:[$eq]").addParam("eq", 2).dialect(4); assertEquals(1, client.ftSearch(index, query).getTotalResults()); } @@ -540,7 +540,7 @@ public void testJsonWithAlias() { assertEquals(1, res.getTotalResults()); assertEquals("king:1", res.getDocuments().get(0).getId()); - res = client.ftSearch(index, new Query("@num:[42]").dialect(5)); + res = client.ftSearch(index, new Query("@num:[42]").dialect(4)); assertEquals(1, res.getTotalResults()); assertEquals("king:1", res.getDocuments().get(0).getId()); } @@ -784,7 +784,7 @@ public void getTagField() { assertEquals(1, client.ftSearch(index, new Query("@category:{yellow}")).getTotalResults()); assertEquals(0, client.ftSearch(index, new Query("@category:{purple}")).getTotalResults()); assertEquals(1, client.ftSearch(index, new Query("@category:{orange\\;purple}")).getTotalResults()); - assertEquals(1, client.ftSearch(index, new Query("@category:{orange;purple}").dialect(5)).getTotalResults()); + assertEquals(1, client.ftSearch(index, new Query("@category:{orange;purple}").dialect(4)).getTotalResults()); assertEquals(4, client.ftSearch(index, new Query("hello")).getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange;purple")), @@ -826,7 +826,7 @@ public void testGetTagFieldWithNonDefaultSeparator() { assertEquals(1, client.ftSearch(index, new Query("hello @category:{yellow}")).getTotalResults()); assertEquals(0, client.ftSearch(index, new Query("@category:{purple}")).getTotalResults()); assertEquals(1, client.ftSearch(index, new Query("@category:{orange\\,purple}")).getTotalResults()); - assertEquals(1, client.ftSearch(index, new Query("@category:{orange,purple}").dialect(5)).getTotalResults()); + assertEquals(1, client.ftSearch(index, new Query("@category:{orange,purple}").dialect(4)).getTotalResults()); assertEquals(4, client.ftSearch(index, new Query("hello")).getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange,purple")), diff --git a/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java b/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java index 3cd6bca1c6..8ea1461ec7 100644 --- a/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java +++ b/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java @@ -610,7 +610,7 @@ public void testQueryParams() { .dialect(2)).getTotalResults()); assertEquals(1, client.ftSearch(index, "@numval:[$eq]", - FTSearchParams.searchParams().addParam("eq", 2).dialect(5)).getTotalResults()); + FTSearchParams.searchParams().addParam("eq", 2).dialect(4)).getTotalResults()); } @Test @@ -673,7 +673,7 @@ public void testJsonWithAlias() { assertEquals(1, res.getTotalResults()); assertEquals("king:1", res.getDocuments().get(0).getId()); - res = client.ftSearch(index, "@num:[42]", FTSearchParams.searchParams().dialect(5)); + res = client.ftSearch(index, "@num:[42]", FTSearchParams.searchParams().dialect(4)); assertEquals(1, res.getTotalResults()); assertEquals("king:1", res.getDocuments().get(0).getId()); } @@ -880,7 +880,7 @@ public void getTagField() { assertEquals(0, client.ftSearch(index, "@category:{purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange\\;purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange;purple}", - FTSearchParams.searchParams().dialect(5)).getTotalResults()); + FTSearchParams.searchParams().dialect(4)).getTotalResults()); assertEquals(4, client.ftSearch(index, "hello").getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange;purple")), @@ -921,7 +921,7 @@ public void testGetTagFieldWithNonDefaultSeparator() { assertEquals(0, client.ftSearch(index, "@category:{purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange\\,purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange,purple}", - FTSearchParams.searchParams().dialect(5)).getTotalResults()); + FTSearchParams.searchParams().dialect(4)).getTotalResults()); assertEquals(4, client.ftSearch(index, "hello").getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange,purple")), From 7077dec6afb9c6e460e35ee23ee4384930dd0bf5 Mon Sep 17 00:00:00 2001 From: M Sazzadul Hoque <7600764+sazzad16@users.noreply.github.com> Date: Thu, 11 Jul 2024 09:14:13 +0600 Subject: [PATCH 3/4] Remove stuff that are not supported --- .../java/redis/clients/jedis/modules/search/SearchTest.java | 2 -- .../clients/jedis/modules/search/SearchWithParamsTest.java | 4 ---- 2 files changed, 6 deletions(-) diff --git a/src/test/java/redis/clients/jedis/modules/search/SearchTest.java b/src/test/java/redis/clients/jedis/modules/search/SearchTest.java index 8feeb014b2..0776eabcd4 100644 --- a/src/test/java/redis/clients/jedis/modules/search/SearchTest.java +++ b/src/test/java/redis/clients/jedis/modules/search/SearchTest.java @@ -784,7 +784,6 @@ public void getTagField() { assertEquals(1, client.ftSearch(index, new Query("@category:{yellow}")).getTotalResults()); assertEquals(0, client.ftSearch(index, new Query("@category:{purple}")).getTotalResults()); assertEquals(1, client.ftSearch(index, new Query("@category:{orange\\;purple}")).getTotalResults()); - assertEquals(1, client.ftSearch(index, new Query("@category:{orange;purple}").dialect(4)).getTotalResults()); assertEquals(4, client.ftSearch(index, new Query("hello")).getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange;purple")), @@ -826,7 +825,6 @@ public void testGetTagFieldWithNonDefaultSeparator() { assertEquals(1, client.ftSearch(index, new Query("hello @category:{yellow}")).getTotalResults()); assertEquals(0, client.ftSearch(index, new Query("@category:{purple}")).getTotalResults()); assertEquals(1, client.ftSearch(index, new Query("@category:{orange\\,purple}")).getTotalResults()); - assertEquals(1, client.ftSearch(index, new Query("@category:{orange,purple}").dialect(4)).getTotalResults()); assertEquals(4, client.ftSearch(index, new Query("hello")).getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange,purple")), diff --git a/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java b/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java index 8ea1461ec7..f4c584d507 100644 --- a/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java +++ b/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java @@ -879,8 +879,6 @@ public void getTagField() { assertEquals(1, client.ftSearch(index, "@category:{yellow}").getTotalResults()); assertEquals(0, client.ftSearch(index, "@category:{purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange\\;purple}").getTotalResults()); - assertEquals(1, client.ftSearch(index, "@category:{orange;purple}", - FTSearchParams.searchParams().dialect(4)).getTotalResults()); assertEquals(4, client.ftSearch(index, "hello").getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange;purple")), @@ -920,8 +918,6 @@ public void testGetTagFieldWithNonDefaultSeparator() { assertEquals(1, client.ftSearch(index, "hello @category:{yellow}").getTotalResults()); assertEquals(0, client.ftSearch(index, "@category:{purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange\\,purple}").getTotalResults()); - assertEquals(1, client.ftSearch(index, "@category:{orange,purple}", - FTSearchParams.searchParams().dialect(4)).getTotalResults()); assertEquals(4, client.ftSearch(index, "hello").getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange,purple")), From 955d94b097ec89265f9b8a1e8ea41ae161db8579 Mon Sep 17 00:00:00 2001 From: M Sazzadul Hoque <7600764+sazzad16@users.noreply.github.com> Date: Thu, 11 Jul 2024 12:34:31 +0600 Subject: [PATCH 4/4] Revert "Remove stuff that are not supported" This reverts commit 7077dec6afb9c6e460e35ee23ee4384930dd0bf5. --- .../java/redis/clients/jedis/modules/search/SearchTest.java | 2 -- .../clients/jedis/modules/search/SearchWithParamsTest.java | 4 ---- 2 files changed, 6 deletions(-) diff --git a/src/test/java/redis/clients/jedis/modules/search/SearchTest.java b/src/test/java/redis/clients/jedis/modules/search/SearchTest.java index 13e490b569..0776eabcd4 100644 --- a/src/test/java/redis/clients/jedis/modules/search/SearchTest.java +++ b/src/test/java/redis/clients/jedis/modules/search/SearchTest.java @@ -784,7 +784,6 @@ public void getTagField() { assertEquals(1, client.ftSearch(index, new Query("@category:{yellow}")).getTotalResults()); assertEquals(0, client.ftSearch(index, new Query("@category:{purple}")).getTotalResults()); assertEquals(1, client.ftSearch(index, new Query("@category:{orange\\;purple}")).getTotalResults()); - assertEquals(1, client.ftSearch(index, new Query("@category:{orange;purple}").dialect(5)).getTotalResults()); assertEquals(4, client.ftSearch(index, new Query("hello")).getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange;purple")), @@ -826,7 +825,6 @@ public void testGetTagFieldWithNonDefaultSeparator() { assertEquals(1, client.ftSearch(index, new Query("hello @category:{yellow}")).getTotalResults()); assertEquals(0, client.ftSearch(index, new Query("@category:{purple}")).getTotalResults()); assertEquals(1, client.ftSearch(index, new Query("@category:{orange\\,purple}")).getTotalResults()); - assertEquals(1, client.ftSearch(index, new Query("@category:{orange,purple}").dialect(5)).getTotalResults()); assertEquals(4, client.ftSearch(index, new Query("hello")).getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange,purple")), diff --git a/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java b/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java index 526ee4436e..f4c584d507 100644 --- a/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java +++ b/src/test/java/redis/clients/jedis/modules/search/SearchWithParamsTest.java @@ -879,8 +879,6 @@ public void getTagField() { assertEquals(1, client.ftSearch(index, "@category:{yellow}").getTotalResults()); assertEquals(0, client.ftSearch(index, "@category:{purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange\\;purple}").getTotalResults()); - assertEquals(1, client.ftSearch(index, "@category:{orange;purple}", - FTSearchParams.searchParams().dialect(5)).getTotalResults()); assertEquals(4, client.ftSearch(index, "hello").getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange;purple")), @@ -920,8 +918,6 @@ public void testGetTagFieldWithNonDefaultSeparator() { assertEquals(1, client.ftSearch(index, "hello @category:{yellow}").getTotalResults()); assertEquals(0, client.ftSearch(index, "@category:{purple}").getTotalResults()); assertEquals(1, client.ftSearch(index, "@category:{orange\\,purple}").getTotalResults()); - assertEquals(1, client.ftSearch(index, "@category:{orange,purple}", - FTSearchParams.searchParams().dialect(5)).getTotalResults()); assertEquals(4, client.ftSearch(index, "hello").getTotalResults()); assertEquals(new HashSet<>(Arrays.asList("red", "blue", "green", "yellow", "orange,purple")),