From 19dd05e41df61cb0d2fc1c591736c966392ea50a Mon Sep 17 00:00:00 2001 From: "hanwen.thw" Date: Wed, 8 Nov 2023 19:05:30 +0800 Subject: [PATCH] tvs.del support multi keys --- .../aliyun/tair/tairvector/TairVector.java | 31 +++++++++++++++++++ .../tair/tairvector/TairVectorCluster.java | 20 ++++++++++++ .../tair/tairvector/TairVectorPipeline.java | 21 +++++++++++++ .../tairvector/TairVectorClusterTest.java | 18 +++++++++++ .../tairvector/TairVectorPipelineTest.java | 22 +++++++++++++ .../tair/tests/tairvector/TairVectorTest.java | 20 +++++++++--- 6 files changed, 128 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/aliyun/tair/tairvector/TairVector.java b/src/main/java/com/aliyun/tair/tairvector/TairVector.java index 7752717..0e6d522 100644 --- a/src/main/java/com/aliyun/tair/tairvector/TairVector.java +++ b/src/main/java/com/aliyun/tair/tairvector/TairVector.java @@ -293,6 +293,37 @@ public Long tvsdel(byte[] index, byte[] entityid) { } } + /** + * TVS.DEL TVS.DEL index entityid1 entityid2 + *

+ * delete entity from tair-vector module + * + * @param index index name + * @param entityids entity id + * @return Long integer-reply the number of fields that were removed from the tair-vector + * not including specified but no existing fields. + */ + public Long tvsdel(final String index, final String... entityids) { + Jedis jedis = getJedis(); + try { + Object obj = jedis.sendCommand(ModuleCommand.TVSDEL, JoinParameters.joinParameters(SafeEncoder.encode(index), SafeEncoder.encodeMany(entityids))); + return BuilderFactory.LONG.build(obj); + } finally { + releaseJedis(jedis); + } + } + + public Long tvsdel(byte[] index, byte[]... entityids) { + Jedis jedis = getJedis(); + try { + Object obj = jedis.sendCommand(ModuleCommand.TVSDEL, JoinParameters.joinParameters(index, entityids)); + return BuilderFactory.LONG.build(obj); + } finally { + releaseJedis(jedis); + } + } + + /** * TVS.HDEL TVS.HDEL index entityid attribute_key [attribute_key ...] *

diff --git a/src/main/java/com/aliyun/tair/tairvector/TairVectorCluster.java b/src/main/java/com/aliyun/tair/tairvector/TairVectorCluster.java index 831db15..11de68a 100644 --- a/src/main/java/com/aliyun/tair/tairvector/TairVectorCluster.java +++ b/src/main/java/com/aliyun/tair/tairvector/TairVectorCluster.java @@ -196,6 +196,26 @@ public Long tvsdel(byte[] index, byte[] entityid) { return BuilderFactory.LONG.build(obj); } + /** + * TVS.DEL TVS.DEL index entityid1 entityi2 + *

+ * delete entity from tair-vector module + * + * @param index index name + * @param entityids entity id + * @return Long integer-reply the number of fields that were removed from the tair-vector + * not including specified but non existing fields. + */ + public Long tvsdel(final String index, final String... entityids) { + Object obj = jc.sendCommand(SafeEncoder.encode(index), ModuleCommand.TVSDEL, JoinParameters.joinParameters(SafeEncoder.encode(index), SafeEncoder.encodeMany(entityids))); + return BuilderFactory.LONG.build(obj); + } + + public Long tvsdel(byte[] index, byte[]... entityids) { + Object obj = jc.sendCommand(index, ModuleCommand.TVSDEL, JoinParameters.joinParameters(index, entityids)); + return BuilderFactory.LONG.build(obj); + } + /** * TVS.HDEL TVS.HDEL index entityid attribute_key [attribute_key ...] *

diff --git a/src/main/java/com/aliyun/tair/tairvector/TairVectorPipeline.java b/src/main/java/com/aliyun/tair/tairvector/TairVectorPipeline.java index 7b6dda7..5497410 100644 --- a/src/main/java/com/aliyun/tair/tairvector/TairVectorPipeline.java +++ b/src/main/java/com/aliyun/tair/tairvector/TairVectorPipeline.java @@ -189,6 +189,27 @@ public Response tvsdel(byte[] index, byte[] entityid) { return getResponse(BuilderFactory.LONG); } + + /** + * TVS.DEL TVS.DEL index entityid1 entityi2 + *

+ * delete entity from tair-vector module + * + * @param index index name + * @param entityids entity id + * @return Long integer-reply the number of fields that were removed from the tair-vector + * not including specified but non existing fields. + */ + public Response tvsdel(final String index, final String... entityids) { + getClient(index).sendCommand(ModuleCommand.TVSDEL, JoinParameters.joinParameters(SafeEncoder.encode(index), SafeEncoder.encodeMany(entityids))); + return getResponse(BuilderFactory.LONG); + } + + public Response tvsdel(byte[] index, byte[]... entityids) { + getClient(SafeEncoder.encode(index)).sendCommand(ModuleCommand.TVSDEL, JoinParameters.joinParameters(index, entityids)); + return getResponse(BuilderFactory.LONG); + } + /** * TVS.HDEL TVS.HDEL index entityid attribute_key [attribute_key ...] *

diff --git a/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorClusterTest.java b/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorClusterTest.java index 7fb747f..575a034 100644 --- a/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorClusterTest.java +++ b/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorClusterTest.java @@ -65,6 +65,14 @@ private void tvs_hset(byte[] entityid, byte[] vector, byte[] param_k, byte[] par assertEquals(result, 2); } + private long tvs_del_entity(String... entity) { + return tairVectorCluster.tvsdel(index, entity); + } + + private long tvs_del_entity(byte[]... entity) { + return tairVectorCluster.tvsdel(SafeEncoder.encode(index), entity); + } + private long tvs_del_entity(String entity) { return tairVectorCluster.tvsdel(index, entity); } @@ -189,6 +197,16 @@ public void tvs_del() { long count_byte = tvs_del_entity(SafeEncoder.encode("second_entity")); assertEquals(1, count_byte); + tairVectorCluster.tvsdelindex(index); + tvs_create_index_and_load_data(); + count_string = tvs_del_entity("first_entity", "second_entity"); + assertEquals(2, count_string); + + tairVectorCluster.tvsdelindex(index); + tvs_create_index_and_load_data(); + count_byte = tvs_del_entity(SafeEncoder.encode("first_entity"), SafeEncoder.encode("second_entity")); + assertEquals(2, count_byte); + tairVectorCluster.tvsdelindex(index); } diff --git a/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorPipelineTest.java b/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorPipelineTest.java index eb5b9c1..2d5cf22 100644 --- a/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorPipelineTest.java +++ b/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorPipelineTest.java @@ -66,6 +66,14 @@ private void tvs_hset(byte[] entityid, byte[] vector, byte[] param_k, byte[] par tairVectorPipeline.tvshset(SafeEncoder.encode(index), entityid, vector, param_k, param_v); } + private void tvs_del_entity(String... entity) { + tairVectorPipeline.tvsdel(index, entity); + } + + private void tvs_del_entity(byte[]... entity) { + tairVectorPipeline.tvsdel(SafeEncoder.encode(index), entity); + } + private void tvs_del_entity(String entity) { tairVectorPipeline.tvsdel(index, entity); } @@ -218,6 +226,20 @@ public void tvs_del() { List objs = tairVectorPipeline.syncAndReturnAll(); assertEquals(1L, (long) objs.get(4)); assertEquals(1L, (long) objs.get(5)); + + tvs_hset("first_entity", "[0.12, 0.23, 0.56, 0.67, 0.78, 0.89, 0.01, 0.89]", "name", "sammy"); + tvs_hset(SafeEncoder.encode("second_entity"), SafeEncoder.encode("[0.22, 0.33, 0.66, 0.77, 0.88, 0.89, 0.11, 0.89]"), + SafeEncoder.encode("name"), SafeEncoder.encode("tiddy")); + tvs_del_entity("first_entity", "second_entity"); + objs = tairVectorPipeline.syncAndReturnAll(); + assertEquals(2L, (long) objs.get(2)); + + tvs_hset("first_entity", "[0.12, 0.23, 0.56, 0.67, 0.78, 0.89, 0.01, 0.89]", "name", "sammy"); + tvs_hset(SafeEncoder.encode("second_entity"), SafeEncoder.encode("[0.22, 0.33, 0.66, 0.77, 0.88, 0.89, 0.11, 0.89]"), + SafeEncoder.encode("name"), SafeEncoder.encode("tiddy")); + tvs_del_entity(SafeEncoder.encodeMany("first_entity", "second_entity")); + objs = tairVectorPipeline.syncAndReturnAll(); + assertEquals(2L, (long) objs.get(2)); } @Test diff --git a/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorTest.java b/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorTest.java index 9c6f5de..78dadee 100644 --- a/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorTest.java +++ b/src/test/java/com/aliyun/tair/tests/tairvector/TairVectorTest.java @@ -70,6 +70,14 @@ private void tvs_hset(byte[] entityid, byte[] vector, byte[] param_k, byte[] par assertTrue(result <= 2); } + private long tvs_del_entity(String... entity) { + return tairVector.tvsdel(index, entity); + } + + private long tvs_del_entity(byte[]... entity) { + return tairVector.tvsdel(SafeEncoder.encode(index), entity); + } + private long tvs_del_entity(String entity) { return tairVector.tvsdel(index, entity); } @@ -263,11 +271,15 @@ public void tvs_del() { SafeEncoder.encode("[0.22, 0.33, 0.66, 0.77, 0.88, 0.89, 0.11, 0.89]"), SafeEncoder.encode("name"), SafeEncoder.encode("tiddy")); - long count_string = tvs_del_entity("first_entity_knn"); - assertEquals(1, count_string); + long count_string = tvs_del_entity("first_entity_knn", "second_entity_knn"); + assertEquals(2, count_string); - long count_byte = tvs_del_entity(SafeEncoder.encode("second_entity_knn")); - assertEquals(1, count_byte); + tvs_hset("first_entity_knn", "[0.12, 0.23, 0.56, 0.67, 0.78, 0.89, 0.01, 0.89]", "name", "sammy"); + tvs_hset(SafeEncoder.encode("second_entity_knn"), + SafeEncoder.encode("[0.22, 0.33, 0.66, 0.77, 0.88, 0.89, 0.11, 0.89]"), + SafeEncoder.encode("name"), SafeEncoder.encode("tiddy")); + long count_byte = tvs_del_entity(SafeEncoder.encode("first_entity_knn"), SafeEncoder.encode("second_entity_knn")); + assertEquals(2, count_byte); } @Test