diff --git a/redisson/src/main/java/org/redisson/RedissonSearch.java b/redisson/src/main/java/org/redisson/RedissonSearch.java index 530c484ec..cf056f024 100644 --- a/redisson/src/main/java/org/redisson/RedissonSearch.java +++ b/redisson/src/main/java/org/redisson/RedissonSearch.java @@ -495,6 +495,9 @@ public class RedissonSearch implements RSearch { args.add(options.getCount()); } if (!options.getParams().isEmpty()) { + if (options.getDialect() == null || options.getDialect() < 2) { + throw new IllegalArgumentException("When use 'PARAMS', you should set DIALECT to 2 or greater than 2."); + } args.add("PARAMS"); args.add(options.getParams().size()*2); for (Map.Entry entry : options.getParams().entrySet()) { diff --git a/redisson/src/test/java/org/redisson/RedissonSearchTest.java b/redisson/src/test/java/org/redisson/RedissonSearchTest.java index cb70e5cac..0c8d16904 100644 --- a/redisson/src/test/java/org/redisson/RedissonSearchTest.java +++ b/redisson/src/test/java/org/redisson/RedissonSearchTest.java @@ -1,6 +1,7 @@ package org.redisson; import com.fasterxml.jackson.core.type.TypeReference; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.redisson.api.RJsonBucket; import org.redisson.api.RMap; @@ -48,7 +49,20 @@ public class RedissonSearchTest extends DockerRedisStackTest { return Objects.hash(name); } } - + + @Test + public void testSearchWithParam() { + RJsonBucket b = redisson.getJsonBucket("doc:1", StringCodec.INSTANCE); + b.set("[{\"arr\": [1, 2, 3]}, {\"val\": \"hello\"}, {\"val\": \"world\"}]"); + + RSearch s = redisson.getSearch(StringCodec.INSTANCE); + Assertions.assertThrows(IllegalArgumentException.class, () -> + s.search("idx", "*", QueryOptions.defaults() + .returnAttributes(new ReturnAttribute("arr"), + new ReturnAttribute("val")) + .params(Collections.singletonMap("12", "323")))); + } + @Test public void testSearchNoContent() { RMap m = redisson.getMap("doc:1", new CompositeCodec(StringCodec.INSTANCE, redisson.getConfig().getCodec()));