Skip to content

Commit 9383cd4

Browse files
authored
Allow setting default dialect for search module (#3452)
1 parent cbcf0f3 commit 9383cd4

File tree

9 files changed

+319
-60
lines changed

9 files changed

+319
-60
lines changed

docs/jedis5-breaking.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@
7070

7171
- `addCommandEncodedArguments` and `addCommandBinaryArguments` methods have been removed from `FieldName` class.
7272

73+
- `getArgs` method is removed from `AggregationBuilder` class.
74+
7375
- `limit` and `getArgs` methods have been removed from `Group` class.
7476

7577
- `Reducer` abstract class is refactored:

src/main/java/redis/clients/jedis/CommandObjects.java

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static redis.clients.jedis.Protocol.Keyword.*;
55

66
import java.util.*;
7+
import java.util.concurrent.atomic.AtomicInteger;
78
import java.util.stream.Collectors;
89
import org.json.JSONArray;
910
import org.json.JSONObject;
@@ -40,6 +41,7 @@ protected void setProtocol(RedisProtocol proto) {
4041
}
4142

4243
private volatile JsonObjectMapper jsonObjectMapper;
44+
private final AtomicInteger searchDialect = new AtomicInteger(0);
4345

4446
private JedisBroadcastAndRoundRobinConfig broadcastAndRoundRobinConfig = null;
4547

@@ -3198,32 +3200,34 @@ public final CommandObject<SearchResult> ftSearch(String indexName, String query
31983200

31993201
public final CommandObject<SearchResult> ftSearch(String indexName, String query, FTSearchParams params) {
32003202
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.SEARCH), indexName)
3201-
.add(query).addParams(params), new SearchResultBuilder(!params.getNoContent(), params.getWithScores(), true));
3203+
.add(query).addParams(params.dialectOptional(searchDialect.get())), new SearchResultBuilder(!params.getNoContent(), params.getWithScores(), true));
32023204
}
32033205

32043206
public final CommandObject<SearchResult> ftSearch(String indexName, Query query) {
3205-
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.SEARCH), indexName).addParams(query),
3207+
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.SEARCH), indexName)
3208+
.addParams(query.dialectOptional(searchDialect.get())),
32063209
new SearchResultBuilder(!query.getNoContent(), query.getWithScores(), true));
32073210
}
32083211

32093212
public final CommandObject<SearchResult> ftSearch(byte[] indexName, Query query) {
3210-
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.SEARCH), indexName).addParams(query),
3213+
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.SEARCH), indexName)
3214+
.addParams(query.dialectOptional(searchDialect.get())),
32113215
new SearchResultBuilder(!query.getNoContent(), query.getWithScores(), false));
32123216
}
32133217

32143218
public final CommandObject<String> ftExplain(String indexName, Query query) {
32153219
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.EXPLAIN), indexName)
3216-
.addParams(query), BuilderFactory.STRING);
3220+
.addParams(query.dialectOptional(searchDialect.get())), BuilderFactory.STRING);
32173221
}
32183222

32193223
public final CommandObject<List<String>> ftExplainCLI(String indexName, Query query) {
32203224
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.EXPLAINCLI), indexName)
3221-
.addParams(query), BuilderFactory.STRING_LIST);
3225+
.addParams(query.dialectOptional(searchDialect.get())), BuilderFactory.STRING_LIST);
32223226
}
32233227

32243228
public final CommandObject<AggregationResult> ftAggregate(String indexName, AggregationBuilder aggr) {
32253229
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.AGGREGATE), indexName)
3226-
.addObjects(aggr.getArgs()), !aggr.isWithCursor() ? SearchBuilderFactory.SEARCH_AGGREGATION_RESULT
3230+
.addParams(aggr.dialectOptional(searchDialect.get())), !aggr.isWithCursor() ? SearchBuilderFactory.SEARCH_AGGREGATION_RESULT
32273231
: SearchBuilderFactory.SEARCH_AGGREGATION_RESULT_WITH_CURSOR);
32283232
}
32293233

@@ -3242,7 +3246,7 @@ public final CommandObject<Map.Entry<AggregationResult, Map<String, Object>>> ft
32423246
String indexName, FTProfileParams profileParams, AggregationBuilder aggr) {
32433247
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.PROFILE), indexName)
32443248
.add(SearchKeyword.AGGREGATE).addParams(profileParams).add(SearchKeyword.QUERY)
3245-
.addObjects(aggr.getArgs()), new SearchProfileResponseBuilder<>(!aggr.isWithCursor()
3249+
.addParams(aggr.dialectOptional(searchDialect.get())), new SearchProfileResponseBuilder<>(!aggr.isWithCursor()
32463250
? SearchBuilderFactory.SEARCH_AGGREGATION_RESULT
32473251
: SearchBuilderFactory.SEARCH_AGGREGATION_RESULT_WITH_CURSOR));
32483252
}
@@ -3251,16 +3255,16 @@ public final CommandObject<Map.Entry<SearchResult, Map<String, Object>>> ftProfi
32513255
String indexName, FTProfileParams profileParams, Query query) {
32523256
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.PROFILE), indexName)
32533257
.add(SearchKeyword.SEARCH).addParams(profileParams).add(SearchKeyword.QUERY)
3254-
.addParams(query), new SearchProfileResponseBuilder<>(new SearchResultBuilder(
3255-
!query.getNoContent(), query.getWithScores(), true)));
3258+
.addParams(query.dialectOptional(searchDialect.get())), new SearchProfileResponseBuilder<>(
3259+
new SearchResultBuilder(!query.getNoContent(), query.getWithScores(), true)));
32563260
}
32573261

32583262
public final CommandObject<Map.Entry<SearchResult, Map<String, Object>>> ftProfileSearch(
32593263
String indexName, FTProfileParams profileParams, String query, FTSearchParams searchParams) {
32603264
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.PROFILE), indexName)
32613265
.add(SearchKeyword.SEARCH).addParams(profileParams).add(SearchKeyword.QUERY).add(query)
3262-
.addParams(searchParams), new SearchProfileResponseBuilder<>(new SearchResultBuilder(
3263-
!searchParams.getNoContent(), searchParams.getWithScores(), true)));
3266+
.addParams(searchParams.dialectOptional(searchDialect.get())), new SearchProfileResponseBuilder<>(
3267+
new SearchResultBuilder(!searchParams.getNoContent(), searchParams.getWithScores(), true)));
32643268
}
32653269

32663270
public final CommandObject<String> ftDropIndex(String indexName) {
@@ -3316,7 +3320,7 @@ public final CommandObject<Map<String, Map<String, Double>>> ftSpellCheck(String
33163320
public final CommandObject<Map<String, Map<String, Double>>> ftSpellCheck(String index, String query,
33173321
FTSpellCheckParams spellCheckParams) {
33183322
return new CommandObject<>(checkAndRoundRobinSearchCommand(commandArguments(SearchCommand.SPELLCHECK), index).add(query)
3319-
.addParams(spellCheckParams), SearchBuilderFactory.SEARCH_SPELLCHECK_RESPONSE);
3323+
.addParams(spellCheckParams.dialectOptional(searchDialect.get())), SearchBuilderFactory.SEARCH_SPELLCHECK_RESPONSE);
33203324
}
33213325

33223326
public final CommandObject<Map<String, Object>> ftInfo(String indexName) {
@@ -4192,6 +4196,11 @@ public void setJsonObjectMapper(JsonObjectMapper jsonObjectMapper) {
41924196
this.jsonObjectMapper = jsonObjectMapper;
41934197
}
41944198

4199+
public void setDefaultSearchDialect(int dialect) {
4200+
if (dialect == 0) throw new IllegalArgumentException("DIALECT=0 cannot be set.");
4201+
this.searchDialect.set(dialect);
4202+
}
4203+
41954204
private class SearchProfileResponseBuilder<T> extends Builder<Map.Entry<T, Map<String, Object>>> {
41964205

41974206
private final Builder<T> replyBuilder;

src/main/java/redis/clients/jedis/UnifiedJedis.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4803,4 +4803,8 @@ public Object executeCommand(CommandArguments args) {
48034803
public void setJsonObjectMapper(JsonObjectMapper jsonObjectMapper) {
48044804
this.commandObjects.setJsonObjectMapper(jsonObjectMapper);
48054805
}
4806+
4807+
public void setDefaultSearchDialect(int dialect) {
4808+
this.commandObjects.setDefaultSearchDialect(dialect);
4809+
}
48064810
}

src/main/java/redis/clients/jedis/search/FTSearchParams.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,18 @@ public FTSearchParams dialect(int dialect) {
422422
return this;
423423
}
424424

425+
/**
426+
* This method will not replace the dialect if it has been already set.
427+
* @param dialect dialect
428+
* @return this
429+
*/
430+
public FTSearchParams dialectOptional(int dialect) {
431+
if (dialect != 0 && this.dialect == null) {
432+
this.dialect = dialect;
433+
}
434+
return this;
435+
}
436+
425437
public boolean getNoContent() {
426438
return noContent;
427439
}

src/main/java/redis/clients/jedis/search/FTSpellCheckParams.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,18 @@ public FTSpellCheckParams dialect(int dialect) {
6969
return this;
7070
}
7171

72+
/**
73+
* This method will not replace the dialect if it has been already set.
74+
* @param dialect dialect
75+
* @return this
76+
*/
77+
public FTSpellCheckParams dialectOptional(int dialect) {
78+
if (dialect != 0 && this.dialect == null) {
79+
this.dialect = dialect;
80+
}
81+
return this;
82+
}
83+
7284
@Override
7385
public void addParams(CommandArguments args) {
7486

src/main/java/redis/clients/jedis/search/Query.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public HighlightTags(String open, String close) {
156156
private boolean wantsSummarize = false;
157157
private String _scorer = null;
158158
private Map<String, Object> _params = null;
159-
private int _dialect = 0;
159+
private Integer _dialect;
160160
private int _slop = -1;
161161
private long _timeout = -1;
162162
private boolean _inOrder = false;
@@ -299,7 +299,7 @@ public void addParams(CommandArguments args) {
299299
}
300300
}
301301

302-
if (_dialect != 0) {
302+
if (_dialect != null) {
303303
args.add(SearchKeyword.DIALECT.getRaw());
304304
args.add(_dialect);
305305
}
@@ -544,6 +544,18 @@ public Query dialect(int dialect) {
544544
return this;
545545
}
546546

547+
/**
548+
* This method will not replace the dialect if it has been already set.
549+
* @param dialect dialect
550+
* @return this
551+
*/
552+
public Query dialectOptional(int dialect) {
553+
if (dialect != 0 && this._dialect == null) {
554+
this._dialect = dialect;
555+
}
556+
return this;
557+
}
558+
547559
/**
548560
* Set the slop to execute the query accordingly
549561
*

0 commit comments

Comments
 (0)