Skip to content

Commit 7db35ac

Browse files
committed
TairVector: support cluster
1 parent f621593 commit 7db35ac

File tree

14 files changed

+1193
-477
lines changed

14 files changed

+1193
-477
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.aliyun.tair</groupId>
88
<artifactId>alibabacloud-tairjedis-sdk</artifactId>
9-
<version>2.4.0-SNAPSHOT</version>
9+
<version>3.0.4</version>
1010
<packaging>jar</packaging>
1111

1212
<name>alibabacloud-tairjedis-sdk</name>

src/main/java/com/aliyun/tair/tairvector/TairVector.java

Lines changed: 107 additions & 210 deletions
Large diffs are not rendered by default.

src/main/java/com/aliyun/tair/tairvector/TairVectorCluster.java

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
package com.aliyun.tair.tairvector;
22

3-
import java.util.ArrayList;
4-
import java.util.Arrays;
5-
import java.util.Collection;
6-
import java.util.List;
7-
import java.util.Map;
8-
import java.util.stream.Collectors;
9-
103
import com.aliyun.tair.ModuleCommand;
11-
import com.aliyun.tair.tairhash.factory.HashBuilderFactory;
124
import com.aliyun.tair.tairvector.factory.VectorBuilderFactory;
135
import com.aliyun.tair.tairvector.params.DistanceMethod;
146
import com.aliyun.tair.tairvector.params.HscanParams;
@@ -19,15 +11,19 @@
1911
import redis.clients.jedis.ScanResult;
2012
import redis.clients.jedis.util.SafeEncoder;
2113

14+
import java.util.*;
15+
import java.util.stream.Collectors;
16+
2217
import static redis.clients.jedis.Protocol.toByteArray;
2318

24-
public class TairVectorCluster {
19+
public class TairVectorCluster implements VectorShard {
2520
private JedisCluster jc;
2621

2722
public TairVectorCluster(JedisCluster jc) {
2823
this.jc = jc;
2924
}
3025

26+
@Override
3127
public void quit() {
3228
if (jc != null) {
3329
jc.close();
@@ -46,11 +42,13 @@ public void quit() {
4642
* @param attrs other columns, optional
4743
* @return Success: +OK; Fail: error
4844
*/
45+
@Override
4946
public String tvscreateindex(final String index, int dims, IndexAlgorithm algorithm, DistanceMethod method, final String... attrs) {
5047
Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSCREATEINDEX, JoinParameters.joinParameters(SafeEncoder.encode(index), toByteArray(dims), SafeEncoder.encode(algorithm.name()), SafeEncoder.encode(method.name()), SafeEncoder.encodeMany(attrs)));
5148
return BuilderFactory.STRING.build(obj);
5249
}
5350

51+
@Override
5452
public byte[] tvscreateindex(byte[] index, int dims, IndexAlgorithm algorithm, DistanceMethod method, final byte[]... params) {
5553
Object obj = jc.sendCommand(index, ModuleCommand.TVSCREATEINDEX, JoinParameters.joinParameters(index, toByteArray(dims), SafeEncoder.encode(algorithm.name()), SafeEncoder.encode(method.name()), params));
5654
return BuilderFactory.BYTE_ARRAY.build(obj);
@@ -64,11 +62,13 @@ public byte[] tvscreateindex(byte[] index, int dims, IndexAlgorithm algorithm, D
6462
* @param index index name
6563
* @return Success: string_map, Fail: empty
6664
*/
65+
@Override
6766
public Map<String, String> tvsgetindex(final String index) {
6867
Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSGETINDEX, SafeEncoder.encode(index));
6968
return BuilderFactory.STRING_MAP.build(obj);
7069
}
7170

71+
@Override
7272
public Map<byte[], byte[]> tvsgetindex(byte[] index) {
7373
Object obj = jc.sendCommand(index, ModuleCommand.TVSGETINDEX, index);
7474
return BuilderFactory.BYTE_ARRAY_MAP.build(obj);
@@ -82,37 +82,18 @@ public Map<byte[], byte[]> tvsgetindex(byte[] index) {
8282
* @param index index name
8383
* @return Success: 1; Fail: 0
8484
*/
85+
@Override
8586
public Long tvsdelindex(final String index) {
8687
Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSDELINDEX, SafeEncoder.encode(index));
8788
return BuilderFactory.LONG.build(obj);
8889
}
8990

91+
@Override
9092
public Long tvsdelindex(byte[] index) {
9193
Object obj = jc.sendCommand(index, ModuleCommand.TVSDELINDEX, index);
9294
return BuilderFactory.LONG.build(obj);
9395
}
9496

95-
96-
/**
97-
* TVS.SCANINDEX TVS.SCANINDEX index_name
98-
* <p>
99-
* scan index
100-
*
101-
* @param cursor start offset
102-
* @param params the params: [MATCH pattern] [COUNT count]
103-
* `MATCH` - Set the pattern which is used to filter the results
104-
* `COUNT` - Set the number of fields in a single scan (default is 10)
105-
* `NOVAL` - The return result contains no data portion, only cursor information
106-
* @return A ScanResult. {@link HashBuilderFactory#EXHSCAN_RESULT_STRING}
107-
*/
108-
public ScanResult<String> tvsscanindex(Long cursor, HscanParams params) {
109-
final List<byte[]> args = new ArrayList<byte[]>();
110-
args.add(toByteArray(cursor));
111-
args.addAll(params.getParams());
112-
Object obj = jc.sendCommand(toByteArray(cursor), ModuleCommand.TVSSCANINDEX, args.toArray(new byte[args.size()][]));
113-
return VectorBuilderFactory.SCAN_CURSOR_STRING.build(obj);
114-
}
115-
11697
/**
11798
* TVS.HSET TVS.HSET index entityid vector [(attribute_key attribute_value) ...]
11899
* <p>
@@ -126,11 +107,13 @@ public ScanResult<String> tvsscanindex(Long cursor, HscanParams params) {
126107
* {@literal k} if success, k is the number of fields that were added..
127108
* throw error like "(error) Illegal vector dimensions" if error
128109
*/
110+
@Override
129111
public Long tvshset(final String index, final String entityid, final String vector, final String... params) {
130112
Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSHSET, JoinParameters.joinParameters(SafeEncoder.encode(index), SafeEncoder.encode(entityid), SafeEncoder.encode(VectorBuilderFactory.VECTOR_TAG), SafeEncoder.encode(vector), SafeEncoder.encodeMany(params)));
131113
return BuilderFactory.LONG.build(obj);
132114
}
133115

116+
@Override
134117
public Long tvshset(byte[] index, byte[] entityid, byte[] vector, final byte[]... params) {
135118
Object obj = jc.sendCommand(index, ModuleCommand.TVSHSET, JoinParameters.joinParameters(index, entityid, SafeEncoder.encode(VectorBuilderFactory.VECTOR_TAG), vector, params));
136119
return BuilderFactory.LONG.build(obj);
@@ -145,11 +128,13 @@ public Long tvshset(byte[] index, byte[] entityid, byte[] vector, final byte[]..
145128
* @param entityid entity id
146129
* @return Map, an empty list when {@code entityid} does not exist.
147130
*/
131+
@Override
148132
public Map<String, String> tvshgetall(final String index, final String entityid) {
149133
Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSHGETALL, SafeEncoder.encode(index), SafeEncoder.encode(entityid));
150134
return BuilderFactory.STRING_MAP.build(obj);
151135
}
152136

137+
@Override
153138
public Map<byte[], byte[]> tvshgetall(byte[] index, byte[] entityid) {
154139
Object obj = jc.sendCommand(index, ModuleCommand.TVSHGETALL, index, entityid);
155140
return BuilderFactory.BYTE_ARRAY_MAP.build(obj);
@@ -165,11 +150,13 @@ public Map<byte[], byte[]> tvshgetall(byte[] index, byte[] entityid) {
165150
* @param attrs attrs
166151
* @return List, an empty list when {@code entityid} or {@code attrs} does not exist .
167152
*/
153+
@Override
168154
public List<String> tvshmget(final String index, final String entityid, final String... attrs) {
169155
Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSHMGET, JoinParameters.joinParameters(SafeEncoder.encode(index), SafeEncoder.encode(entityid), SafeEncoder.encodeMany(attrs)));
170156
return BuilderFactory.STRING_LIST.build(obj);
171157
}
172158

159+
@Override
173160
public List<byte[]> tvshmget(byte[] index, byte[] entityid, byte[]... attrs) {
174161
Object obj = jc.sendCommand(index, ModuleCommand.TVSHMGET, JoinParameters.joinParameters(index, entityid, attrs));
175162
return BuilderFactory.BYTE_ARRAY_LIST.build(obj);
@@ -186,11 +173,13 @@ public List<byte[]> tvshmget(byte[] index, byte[] entityid, byte[]... attrs) {
186173
* @return Long integer-reply the number of fields that were removed from the tair-vector
187174
* not including specified but non existing fields.
188175
*/
176+
@Override
189177
public Long tvsdel(final String index, final String entityid) {
190178
Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSDEL, SafeEncoder.encode(index), SafeEncoder.encode(entityid));
191179
return BuilderFactory.LONG.build(obj);
192180
}
193181

182+
@Override
194183
public Long tvsdel(byte[] index, byte[] entityid) {
195184
Object obj = jc.sendCommand(index, ModuleCommand.TVSDEL, index, entityid);
196185
return BuilderFactory.LONG.build(obj);
@@ -207,13 +196,15 @@ public Long tvsdel(byte[] index, byte[] entityid) {
207196
* @return Long integer-reply the number of fields that were removed from the tair-vector
208197
* not including specified but non existing fields.
209198
*/
199+
@Override
210200
public Long tvshdel(final String index, final String entityid, final String... attrs) {
211201
Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSHDEL, JoinParameters.joinParameters(SafeEncoder.encode(index), SafeEncoder.encode(entityid), SafeEncoder.encodeMany(attrs)));
212202
return BuilderFactory.LONG.build(obj);
213203
}
214204

205+
@Override
215206
public Long tvshdel(byte[] index, byte[] entityid, byte[]... attrs) {
216-
Object obj = jc.sendCommand(index, ModuleCommand.TVSHDEL, JoinParameters.joinParameters(index, entityid, attrs));
207+
Object obj = jc.sendCommand(index, ModuleCommand.TVSHDEL, JoinParameters.joinParameters(index, entityid,attrs));
217208
return BuilderFactory.LONG.build(obj);
218209
}
219210

@@ -231,6 +222,7 @@ public Long tvshdel(byte[] index, byte[] entityid, byte[]... attrs) {
231222
* `NOVAL` - The return result contains no data portion, only cursor information
232223
* @return A ScanResult.
233224
*/
225+
@Override
234226
public ScanResult<String> tvsscan(final String index, Long cursor, HscanParams params) {
235227
final List<byte[]> args = new ArrayList<byte[]>();
236228
args.add(SafeEncoder.encode(index));
@@ -240,6 +232,7 @@ public ScanResult<String> tvsscan(final String index, Long cursor, HscanParams p
240232
return VectorBuilderFactory.SCAN_CURSOR_STRING.build(obj);
241233
}
242234

235+
@Override
243236
public ScanResult<byte[]> tvsscan(byte[] index, Long cursor, HscanParams params) {
244237
final List<byte[]> args = new ArrayList<byte[]>();
245238
args.add(index);
@@ -261,10 +254,12 @@ public ScanResult<byte[]> tvsscan(byte[] index, Long cursor, HscanParams params)
261254
* ef_search range [0, 1000]
262255
* @return VectorBuilderFactory.Knn<>
263256
*/
257+
@Override
264258
public VectorBuilderFactory.Knn<String> tvsknnsearch(final String index, Long topn, final String vector, final String... params) {
265259
return tvsknnsearchfilter(index, topn, vector, "", params);
266260
}
267261

262+
@Override
268263
public VectorBuilderFactory.Knn<byte[]> tvsknnsearch(byte[] index, Long topn, byte[] vector, final byte[]... params) {
269264
return tvsknnsearchfilter(index, topn, vector, SafeEncoder.encode(""), params);
270265
}
@@ -282,12 +277,14 @@ public VectorBuilderFactory.Knn<byte[]> tvsknnsearch(byte[] index, Long topn, by
282277
* ef_search range [0, 1000]
283278
* @return VectorBuilderFactory.Knn<>
284279
*/
280+
@Override
285281
public VectorBuilderFactory.Knn<String> tvsknnsearchfilter(final String index, Long topn, final String vector, final String pattern, final String... params) {
286282
Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSKNNSEARCH, JoinParameters.joinParameters(SafeEncoder.encode(index), toByteArray(topn),
287283
SafeEncoder.encode(vector), SafeEncoder.encode(pattern), SafeEncoder.encodeMany(params)));
288284
return VectorBuilderFactory.STRING_KNN_RESULT.build(obj);
289285
}
290286

287+
@Override
291288
public VectorBuilderFactory.Knn<byte[]> tvsknnsearchfilter(byte[] index, Long topn, byte[] vector, byte[] pattern, final byte[]... params) {
292289
Object obj = jc.sendCommand(index, ModuleCommand.TVSKNNSEARCH, JoinParameters.joinParameters(index, toByteArray(topn), vector, pattern, params));
293290
return VectorBuilderFactory.BYTE_KNN_RESULT.build(obj);
@@ -303,10 +300,12 @@ public VectorBuilderFactory.Knn<byte[]> tvsknnsearchfilter(byte[] index, Long to
303300
* ef_search range [0, 1000]
304301
* @return Collection<>
305302
*/
303+
@Override
306304
public Collection<VectorBuilderFactory.Knn<String>> tvsmknnsearch(final String index, Long topn, Collection<String> vectors, final String... params) {
307305
return tvsmknnsearchfilter(index, topn, vectors, "", params);
308306
}
309307

308+
@Override
310309
public Collection<VectorBuilderFactory.Knn<byte[]>> tvsmknnsearch(byte[] index, Long topn, Collection<byte[]> vectors, final byte[]... params) {
311310
return tvsmknnsearchfilter(index, topn, vectors, SafeEncoder.encode(""), params);
312311
}
@@ -322,6 +321,7 @@ public Collection<VectorBuilderFactory.Knn<byte[]>> tvsmknnsearch(byte[] index,
322321
* ef_search range [0, 1000]
323322
* @return Collection<>
324323
*/
324+
@Override
325325
public Collection<VectorBuilderFactory.Knn<String>> tvsmknnsearchfilter(final String index, Long topn, Collection<String> vectors, final String pattern, final String... params) {
326326
final List<byte[]> args = new ArrayList<byte[]>();
327327
args.add(SafeEncoder.encode(index));
@@ -334,6 +334,7 @@ public Collection<VectorBuilderFactory.Knn<String>> tvsmknnsearchfilter(final St
334334
return VectorBuilderFactory.STRING_KNN_BATCH_RESULT.build(obj);
335335
}
336336

337+
@Override
337338
public Collection<VectorBuilderFactory.Knn<byte[]>> tvsmknnsearchfilter(byte[] index, Long topn, Collection<byte[]> vectors, byte[] pattern, final byte[]... params) {
338339
final List<byte[]> args = new ArrayList<byte[]>();
339340
args.add(index);
@@ -345,4 +346,6 @@ public Collection<VectorBuilderFactory.Knn<byte[]>> tvsmknnsearchfilter(byte[] i
345346
Object obj = jc.sendCommand(index, ModuleCommand.TVSMKNNSEARCH, args.toArray(new byte[args.size()][]));
346347
return VectorBuilderFactory.BYTE_KNN_BATCH_RESULT.build(obj);
347348
}
349+
350+
348351
}

src/main/java/com/aliyun/tair/tairvector/TairVectorPipeline.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
package com.aliyun.tair.tairvector;
22

3-
import java.util.ArrayList;
4-
import java.util.Arrays;
5-
import java.util.Collection;
6-
import java.util.List;
7-
import java.util.Map;
8-
import java.util.stream.Collectors;
9-
103
import com.aliyun.tair.ModuleCommand;
114
import com.aliyun.tair.tairhash.factory.HashBuilderFactory;
125
import com.aliyun.tair.tairvector.factory.VectorBuilderFactory;
@@ -20,6 +13,9 @@
2013
import redis.clients.jedis.ScanResult;
2114
import redis.clients.jedis.util.SafeEncoder;
2215

16+
import java.util.*;
17+
import java.util.stream.Collectors;
18+
2319
import static redis.clients.jedis.Protocol.toByteArray;
2420

2521
public class TairVectorPipeline extends Pipeline {

0 commit comments

Comments
 (0)