diff --git a/src/main/java/com/redislabs/lettusearch/RediSearchCommandBuilder.java b/src/main/java/com/redislabs/lettusearch/RediSearchCommandBuilder.java
index b073c58..5f0408b 100644
--- a/src/main/java/com/redislabs/lettusearch/RediSearchCommandBuilder.java
+++ b/src/main/java/com/redislabs/lettusearch/RediSearchCommandBuilder.java
@@ -34,7 +34,7 @@ protected Command createCommand(CommandType type, CommandOutp
public Command create(K index, CreateOptions options, Field... fields) {
assertNotNull(index, "index");
- LettuceAssert.isTrue(fields.length>0, "At least one field is required.");
+ LettuceAssert.isTrue(fields.length > 0, "At least one field is required.");
RediSearchCommandArgs args = createArgs(index);
if (options != null) {
options.build(args);
@@ -167,18 +167,26 @@ public Command sugadd(K key, Suggestion suggestion, boolean incre
}
public Command>> sugget(K key, V prefix) {
- return sugget(key, prefix, SuggetOptions.builder().build());
+ return sugget(key, prefix, null);
}
public Command>> sugget(K key, V prefix, SuggetOptions options) {
assertNotNull(key, "key");
assertNotNull(prefix, "prefix");
- assertNotNull(options, "options");
RediSearchCommandArgs args = new RediSearchCommandArgs<>(codec);
args.addKey(key);
args.addValue(prefix);
- options.build(args);
- return createCommand(SUGGET, new SuggestOutput<>(codec, options), args);
+ if (options != null) {
+ options.build(args);
+ }
+ return createCommand(SUGGET, suggestOutput(options), args);
+ }
+
+ private SuggestOutput suggestOutput(SuggetOptions options) {
+ if (options == null) {
+ return new SuggestOutput<>(codec);
+ }
+ return new SuggestOutput<>(codec, options.isWithScores(), options.isWithPayloads());
}
public Command sugdel(K key, V string) {
diff --git a/src/main/java/com/redislabs/lettusearch/output/SuggestOutput.java b/src/main/java/com/redislabs/lettusearch/output/SuggestOutput.java
index 95f9118..54fd9be 100644
--- a/src/main/java/com/redislabs/lettusearch/output/SuggestOutput.java
+++ b/src/main/java/com/redislabs/lettusearch/output/SuggestOutput.java
@@ -1,41 +1,50 @@
package com.redislabs.lettusearch.output;
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-
import com.redislabs.lettusearch.Suggestion;
-import com.redislabs.lettusearch.SuggetOptions;
-
import io.lettuce.core.codec.RedisCodec;
import io.lettuce.core.output.CommandOutput;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
public class SuggestOutput extends CommandOutput>> {
+ private final boolean withScores;
+ private final boolean withPayloads;
private Suggestion current;
- private final SuggetOptions options;
+ private boolean payloadSet = false;
+ private boolean scoreSet = false;
+
+ public SuggestOutput(RedisCodec codec) {
+ this(codec, false, false);
+ }
- public SuggestOutput(RedisCodec codec, SuggetOptions options) {
+ public SuggestOutput(RedisCodec codec, boolean withScores, boolean withPayloads) {
super(codec, new ArrayList<>());
- this.options = options;
+ this.withScores = withScores;
+ this.withPayloads = withPayloads;
}
@Override
public void set(ByteBuffer bytes) {
if (current == null) {
current = new Suggestion<>();
+ payloadSet = false;
+ scoreSet = false;
if (bytes != null) {
current.setString(codec.decodeValue(bytes));
}
output.add(current);
- if (!options.isWithScores() && !options.isWithPayloads()) {
+ if (!withScores && !withPayloads) {
current = null;
}
} else {
- if (current.getPayload() == null && options.isWithPayloads()) {
+ if (withPayloads && !payloadSet) {
if (bytes != null) {
current.setPayload(codec.decodeValue(bytes));
}
+ payloadSet = true;
current = null;
}
}
@@ -43,9 +52,10 @@ public void set(ByteBuffer bytes) {
@Override
public void set(double number) {
- if (current.getScore() == null && options.isWithScores()) {
+ if (withScores && !scoreSet) {
current.setScore(number);
- if (!options.isWithPayloads()) {
+ scoreSet = true;
+ if (!withPayloads) {
current = null;
}
}
diff --git a/src/test/java/com/redislabs/lettusearch/TestSuggestions.java b/src/test/java/com/redislabs/lettusearch/TestSuggest.java
similarity index 81%
rename from src/test/java/com/redislabs/lettusearch/TestSuggestions.java
rename to src/test/java/com/redislabs/lettusearch/TestSuggest.java
index 36880fa..f8a1ad1 100644
--- a/src/test/java/com/redislabs/lettusearch/TestSuggestions.java
+++ b/src/test/java/com/redislabs/lettusearch/TestSuggest.java
@@ -8,10 +8,17 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public class TestSuggestions extends AbstractBaseTest {
+public class TestSuggest extends AbstractBaseTest {
@Test
public void testSugget() throws IOException {
+ createBeerSuggestions();
+ List> results = sync.sugget(SUGINDEX, "Ame");
+ assertEquals(5, results.size());
+ }
+
+ @Test
+ public void testSuggetOptions() throws IOException {
createBeerSuggestions();
List> results = sync.sugget(SUGINDEX, "Ame", SuggetOptions.builder().max(1000L).build());
assertEquals(8, results.size());