Skip to content

Commit a534401

Browse files
author
Julien Ruaux
committed
Added config documentation to README
1 parent 2145574 commit a534401

File tree

8 files changed

+88
-26
lines changed

8 files changed

+88
-26
lines changed

README.adoc

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,50 @@ image:https://img.shields.io/nexus/s/{project-group}/{artifact-id}?server=https%
1313
image:https://codecov.io/gh/{project-owner}/{project-name}/branch/master/graph/badge.svg?token={codecov-token}["Coverage", link="https://codecov.io/gh/{project-owner}/{project-name}"]
1414

1515
Redis-SQL is a SQL interface to https://oss.redislabs.com/redisearch/[RediSearch] implemented as a https://trino.io[Trino] connector.
16+
It allows the use of RediSearch indexes as tables in Trino.
17+
18+
== Requirements
19+
20+
To connect to RediSearch you need:
21+
22+
. RediSearch 2.0 or higher
23+
. Network access from the Trino coordinator and workers to RediSearch.
24+
25+
== Configuration
26+
27+
To configure the RediSearch connector, create a catalog properties file `etc/catalog/redisearch.properties` with the following contents (replace properties as appropriate):
28+
29+
[source,properties]
30+
----
31+
connector.name=redisearch
32+
redisearch.uri=redis://user:pass@host:6379
33+
----
34+
35+
.Configuration properties
36+
[%header]
37+
|====
38+
|Property Name|Description
39+
|`redisearch.uri`|The connection URI that the driver uses to connect to Redis
40+
|`redisearch.case-insensitive-name-matching`|Match index names case insensitively
41+
|`redisearch.default-limit`|Default search limit number to use
42+
|====
43+
44+
`redisearch.uri`:: A connection string containing the protocol, credential, and host info to connect to Redis.
45+
+
46+
For example, the connection string may use the format `redis://<user>:<pass>@<host>:<port>`.
47+
+
48+
See the https://github.com/lettuce-io/lettuce-core/wiki/Redis-URI-and-connection-details#uri-syntax[Redis URI syntax] for more information.
49+
+
50+
This property is required and has no default. A Redis URI must be provided to connect to RediSearch.
51+
52+
`redisearch.case-insensitive-name-matching`:: Match index names case insensitively.
53+
+
54+
This property is optional and the default is `false`.
55+
56+
`redisearch.default-limit`:: Max number of documents returned by FT.SEARCH and FT.AGGREGATE when no limit is present in the SQL query.
57+
+
58+
This property is optional and the default is `10000`.
59+
1660

1761
== Docker Example
1862

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
connector.name=redisearch
2-
redisearch.uri=redis://docker.for.mac.host.internal:6379
2+
redisearch.uri=redis://host.docker.internal:6379

subprojects/trino-redisearch/src/main/java/com/redis/trino/RediSearchConfig.java renamed to subprojects/trino-redisearch/src/main/java/com/redis/trino/RediSearchClientConfig.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import io.airlift.configuration.ConfigDescription;
1010
import io.airlift.configuration.ConfigSecuritySensitive;
1111

12-
public class RediSearchConfig {
12+
public class RediSearchClientConfig {
1313

1414
public static final String DEFAULT_SCHEMA = "default";
1515
public static final long DEFAULT_LIMIT = 10000;
@@ -18,14 +18,25 @@ public class RediSearchConfig {
1818
private Optional<String> uri = Optional.empty();
1919
private boolean caseInsensitiveNameMatching;
2020
private long defaultLimit = DEFAULT_LIMIT;
21+
private long cursorCount = 0; // Use RediSearch default
22+
23+
public long getCursorCount() {
24+
return cursorCount;
25+
}
26+
27+
@Config("redisearch.cursor-count")
28+
public RediSearchClientConfig setCursorCount(long cursorCount) {
29+
this.cursorCount = cursorCount;
30+
return this;
31+
}
2132

2233
public long getDefaultLimit() {
2334
return defaultLimit;
2435
}
2536

2637
@Config("redisearch.default-limit")
2738
@ConfigDescription("Default search limit number to use")
28-
public RediSearchConfig setDefaultLimit(long defaultLimit) {
39+
public RediSearchClientConfig setDefaultLimit(long defaultLimit) {
2940
this.defaultLimit = defaultLimit;
3041
return this;
3142
}
@@ -37,7 +48,7 @@ public String getDefaultSchema() {
3748

3849
@Config("redisearch.default-schema-name")
3950
@ConfigDescription("Default schema name to use")
40-
public RediSearchConfig setDefaultSchema(String defaultSchema) {
51+
public RediSearchClientConfig setDefaultSchema(String defaultSchema) {
4152
this.defaultSchema = defaultSchema;
4253
return this;
4354
}
@@ -50,7 +61,7 @@ public RediSearchConfig setDefaultSchema(String defaultSchema) {
5061
@Config("redisearch.uri")
5162
@ConfigDescription("Redis connection URI e.g. 'redis://localhost:6379'")
5263
@ConfigSecuritySensitive
53-
public RediSearchConfig setUri(String uri) {
64+
public RediSearchClientConfig setUri(String uri) {
5465
this.uri = Optional.ofNullable(uri);
5566
return this;
5667
}
@@ -61,7 +72,7 @@ public boolean isCaseInsensitiveNameMatching() {
6172

6273
@Config("redisearch.case-insensitive-name-matching")
6374
@ConfigDescription("Case-insensitive name-matching")
64-
public RediSearchConfig setCaseInsensitiveNameMatching(boolean caseInsensitiveNameMatching) {
75+
public RediSearchClientConfig setCaseInsensitiveNameMatching(boolean caseInsensitiveNameMatching) {
6576
this.caseInsensitiveNameMatching = caseInsensitiveNameMatching;
6677
return this;
6778
}

subprojects/trino-redisearch/src/main/java/com/redis/trino/RediSearchClientModule.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ public void configure(Binder binder) {
2424
binder.bind(RediSearchPageSourceProvider.class).in(Scopes.SINGLETON);
2525
binder.bind(RediSearchPageSinkProvider.class).in(Scopes.SINGLETON);
2626

27-
configBinder(binder).bindConfig(RediSearchConfig.class);
27+
configBinder(binder).bindConfig(RediSearchClientConfig.class);
2828
}
2929

3030
@Singleton
3131
@Provides
32-
public static RediSearchSession createRediSearchSession(TypeManager typeManager, RediSearchConfig config) {
32+
public static RediSearchSession createRediSearchSession(TypeManager typeManager, RediSearchClientConfig config) {
3333
requireNonNull(config, "config is null");
3434
Optional<String> uri = config.getUri();
3535
if (uri.isPresent()) {

subprojects/trino-redisearch/src/main/java/com/redis/trino/RediSearchPageSink.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public class RediSearchPageSink implements ConnectorPageSink {
6161
private final List<RediSearchColumnHandle> columns;
6262
private final UlidFactory factory = UlidFactory.newInstance(new Random());
6363

64-
public RediSearchPageSink(RediSearchConfig config, RediSearchSession rediSearchSession,
64+
public RediSearchPageSink(RediSearchClientConfig config, RediSearchSession rediSearchSession,
6565
SchemaTableName schemaTableName, List<RediSearchColumnHandle> columns) {
6666
this.rediSearchSession = rediSearchSession;
6767
this.schemaTableName = schemaTableName;

subprojects/trino-redisearch/src/main/java/com/redis/trino/RediSearchPageSinkProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111

1212
public class RediSearchPageSinkProvider implements ConnectorPageSinkProvider {
1313

14-
private final RediSearchConfig config;
14+
private final RediSearchClientConfig config;
1515
private final RediSearchSession rediSearchSession;
1616

1717
@Inject
18-
public RediSearchPageSinkProvider(RediSearchConfig config, RediSearchSession rediSearchSession) {
18+
public RediSearchPageSinkProvider(RediSearchClientConfig config, RediSearchSession rediSearchSession) {
1919
this.config = config;
2020
this.rediSearchSession = rediSearchSession;
2121
}

subprojects/trino-redisearch/src/main/java/com/redis/trino/RediSearchSession.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,11 @@ public class RediSearchSession {
6969

7070
private final TypeManager typeManager;
7171
private final StatefulRedisModulesConnection<String, String> connection;
72-
private final RediSearchConfig config;
72+
private final RediSearchClientConfig config;
7373
private final LoadingCache<SchemaTableName, RediSearchTable> tableCache;
74-
private final long pageSize = 1000;
7574

7675
public RediSearchSession(TypeManager typeManager, StatefulRedisModulesConnection<String, String> connection,
77-
RediSearchConfig config) {
76+
RediSearchClientConfig config) {
7877
this.typeManager = requireNonNull(typeManager, "typeManager is null");
7978
this.connection = requireNonNull(connection, "connection is null");
8079
this.config = requireNonNull(config, "config is null");
@@ -87,7 +86,7 @@ public StatefulRedisModulesConnection<String, String> getConnection() {
8786
return connection;
8887
}
8988

90-
public RediSearchConfig getConfig() {
89+
public RediSearchClientConfig getConfig() {
9190
return config;
9291
}
9392

@@ -131,18 +130,17 @@ public void createTable(SchemaTableName schemaTableName, List<RediSearchColumnHa
131130
}
132131

133132
public void dropTable(SchemaTableName tableName) {
134-
connection.sync().dropindexDeleteDocs(toRemoteTableName(tableName.getSchemaName(), tableName.getTableName()));
133+
connection.sync().dropindexDeleteDocs(toRemoteTableName(tableName.getTableName()));
135134
tableCache.invalidate(tableName);
136135
}
137136

138137
public void addColumn(SchemaTableName schemaTableName, ColumnMetadata columnMetadata) {
139-
String schemaName = schemaTableName.getSchemaName();
140-
String tableName = toRemoteTableName(schemaName, schemaTableName.getTableName());
138+
String tableName = toRemoteTableName(schemaTableName.getTableName());
141139
connection.sync().alter(tableName, buildField(columnMetadata.getName(), columnMetadata.getType()));
142140
tableCache.invalidate(schemaTableName);
143141
}
144142

145-
private String toRemoteTableName(String schemaName, String tableName) {
143+
private String toRemoteTableName(String tableName) {
146144
verify(tableName.equals(tableName.toLowerCase(ENGLISH)), "tableName not in lower-case: %s", tableName);
147145
if (!config.isCaseInsensitiveNameMatching()) {
148146
return tableName;
@@ -219,11 +217,19 @@ public AggregateWithCursorResults<String> aggregate(RediSearchTableHandle table)
219217
group.ifPresent(optionsBuilder::group);
220218
AggregateOptions<String, String> options = optionsBuilder.build();
221219
log.info("Running aggregation on index %s with query '%s' and %s", index, query, options);
222-
return connection.sync().aggregate(index, query, CursorOptions.builder().count(pageSize).build(), options);
220+
CursorOptions.Builder cursorOptions = CursorOptions.builder();
221+
if (config.getCursorCount() > 0) {
222+
cursorOptions.count(config.getCursorCount());
223+
}
224+
return connection.sync().aggregate(index, query, cursorOptions.build(), options);
223225
}
224226

225227
public AggregateWithCursorResults<String> cursorRead(RediSearchTableHandle tableHandle, long cursor) {
226-
return connection.sync().cursorRead(index(tableHandle), cursor, pageSize);
228+
String index = index(tableHandle);
229+
if (config.getCursorCount() > 0) {
230+
return connection.sync().cursorRead(index, cursor, config.getCursorCount());
231+
}
232+
return connection.sync().cursorRead(index, cursor);
227233
}
228234

229235
private String index(RediSearchTableHandle tableHandle) {

subprojects/trino-redisearch/src/test/java/com/redis/trino/TestRediSearchConfig.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ public class TestRediSearchConfig {
1616

1717
@Test
1818
public void testDefaults() {
19-
assertRecordedDefaults(
20-
recordDefaults(RediSearchConfig.class).setUri(null).setDefaultSchema(RediSearchConfig.DEFAULT_SCHEMA)
21-
.setDefaultLimit(RediSearchConfig.DEFAULT_LIMIT).setCaseInsensitiveNameMatching(false));
19+
assertRecordedDefaults(recordDefaults(RediSearchClientConfig.class).setUri(null)
20+
.setDefaultSchema(RediSearchClientConfig.DEFAULT_SCHEMA)
21+
.setDefaultLimit(RediSearchClientConfig.DEFAULT_LIMIT).setCaseInsensitiveNameMatching(false)
22+
.setCursorCount(0));
2223
}
2324

2425
@Test
@@ -29,9 +30,9 @@ public void testExplicitPropertyMappings() {
2930
.put("redisearch.default-schema-name", defaultSchema).build();
3031

3132
ConfigurationFactory configurationFactory = new ConfigurationFactory(properties);
32-
RediSearchConfig config = configurationFactory.build(RediSearchConfig.class);
33+
RediSearchClientConfig config = configurationFactory.build(RediSearchClientConfig.class);
3334

34-
RediSearchConfig expected = new RediSearchConfig().setDefaultSchema(defaultSchema).setUri(uri);
35+
RediSearchClientConfig expected = new RediSearchClientConfig().setDefaultSchema(defaultSchema).setUri(uri);
3536

3637
assertEquals(config.getDefaultSchema(), expected.getDefaultSchema());
3738
assertEquals(config.getUri(), expected.getUri());

0 commit comments

Comments
 (0)