This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 398a092ae05 Weaviate - update with/without merge option (#18251)
398a092ae05 is described below

commit 398a092ae0558522f3e15f0df7851846b53f659a
Author: JiriOndrusek <[email protected]>
AuthorDate: Tue Jun 3 12:27:48 2025 +0200

    Weaviate - update with/without merge option (#18251)
---
 .../apache/camel/catalog/components/weaviate.json  |  3 +-
 .../apache/camel/component/weaviate/weaviate.json  |  3 +-
 .../camel/component/weaviate/WeaviateVectorDb.java |  3 +
 .../weaviate/WeaviateVectorDbProducer.java         | 13 +++-
 .../component/weaviate/it/WeaviateComponentIT.java | 28 ++++----
 .../component/weaviate/it/WeaviateContainerIT.java | 76 ++++++++++++++++++----
 .../WeaviateVectorDbEndpointBuilderFactory.java    | 13 ++++
 7 files changed, 110 insertions(+), 29 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/weaviate.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/weaviate.json
index 30d14aa1f2c..9508ec5a15c 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/weaviate.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/weaviate.json
@@ -47,7 +47,8 @@
     "CamelWeaviateFields": { "index": 9, "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "HashMap", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Weaviate Object fields", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#FIELDS" },
     "CamelWeaviateProperties": { "index": 10, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "HashMap", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Weaviate Object properties", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#PROPERTIES" },
     "CamelWeaviateIndexId": { "index": 11, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Index Id", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#INDEX_ID" },
-    "CamelWeaviateQueryTopK": { "index": 12, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Query Top K", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#QUERY_TOP_K" }
+    "CamelWeaviateQueryTopK": { "index": 12, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Query Top K", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#QUERY_TOP_K" },
+    "CamelWeaviateUpdateWithMerge": { "index": 13, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "defaultValue": "true", "description": "Merges 
properties into the object", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#UPDATE_WITH_MERGE"
 }
   },
   "properties": {
     "collection": { "index": 0, "kind": "path", "displayName": "Collection", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The collection Name" },
diff --git 
a/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/org/apache/camel/component/weaviate/weaviate.json
 
b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/org/apache/camel/component/weaviate/weaviate.json
index 30d14aa1f2c..9508ec5a15c 100644
--- 
a/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/org/apache/camel/component/weaviate/weaviate.json
+++ 
b/components/camel-ai/camel-weaviate/src/generated/resources/META-INF/org/apache/camel/component/weaviate/weaviate.json
@@ -47,7 +47,8 @@
     "CamelWeaviateFields": { "index": 9, "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "HashMap", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Weaviate Object fields", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#FIELDS" },
     "CamelWeaviateProperties": { "index": 10, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "HashMap", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Weaviate Object properties", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#PROPERTIES" },
     "CamelWeaviateIndexId": { "index": 11, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Index Id", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#INDEX_ID" },
-    "CamelWeaviateQueryTopK": { "index": 12, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Query Top K", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#QUERY_TOP_K" }
+    "CamelWeaviateQueryTopK": { "index": 12, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Query Top K", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#QUERY_TOP_K" },
+    "CamelWeaviateUpdateWithMerge": { "index": 13, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "defaultValue": "true", "description": "Merges 
properties into the object", "constantName": 
"org.apache.camel.component.weaviate.WeaviateVectorDb$Headers#UPDATE_WITH_MERGE"
 }
   },
   "properties": {
     "collection": { "index": 0, "kind": "path", "displayName": "Collection", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The collection Name" },
diff --git 
a/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDb.java
 
b/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDb.java
index 3b04111e1fd..80a7dc6be2d 100644
--- 
a/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDb.java
+++ 
b/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDb.java
@@ -64,5 +64,8 @@ public class WeaviateVectorDb {
 
         @Metadata(description = "Query Top K", javaType = "Integer")
         public static final String QUERY_TOP_K = "CamelWeaviateQueryTopK";
+
+        @Metadata(description = "Merges properties into the object", javaType 
= "Boolean", defaultValue = "true")
+        public static final String UPDATE_WITH_MERGE = 
"CamelWeaviateUpdateWithMerge";
     }
 }
diff --git 
a/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDbProducer.java
 
b/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDbProducer.java
index 653beb93981..0edb41b2380 100644
--- 
a/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDbProducer.java
+++ 
b/components/camel-ai/camel-weaviate/src/main/java/org/apache/camel/component/weaviate/WeaviateVectorDbProducer.java
@@ -23,6 +23,7 @@ import java.util.concurrent.ExecutorService;
 
 import io.weaviate.client.WeaviateClient;
 import io.weaviate.client.base.Result;
+import io.weaviate.client.v1.data.api.ObjectUpdater;
 import io.weaviate.client.v1.data.model.WeaviateObject;
 import io.weaviate.client.v1.graphql.model.GraphQLResponse;
 import io.weaviate.client.v1.graphql.query.argument.NearVectorArgument;
@@ -163,12 +164,20 @@ public class WeaviateVectorDbProducer extends 
DefaultProducer {
         }
 
         Float[] vectors = (Float[]) elements.toArray(new Float[0]);
+        HashMap<String, Object> props = 
in.getHeader(WeaviateVectorDb.Headers.PROPERTIES, HashMap.class);
+
+        ObjectUpdater ou = client.data().updater();
 
-        Result<Boolean> result = client.data().updater()
-                .withMerge()
+        boolean updateWithMerge = 
in.getHeader(WeaviateVectorDb.Headers.UPDATE_WITH_MERGE, true, Boolean.class);
+        if (updateWithMerge) {
+            ou.withMerge();
+        }
+
+        Result<Boolean> result = ou
                 .withID(indexId)
                 .withClassName(collectionName)
                 .withVector(vectors)
+                .withProperties(props)
                 .run();
 
         populateResponse(result, exchange);
diff --git 
a/components/camel-ai/camel-weaviate/src/test/java/org/apache/camel/component/weaviate/it/WeaviateComponentIT.java
 
b/components/camel-ai/camel-weaviate/src/test/java/org/apache/camel/component/weaviate/it/WeaviateComponentIT.java
index 105e66c3f85..d61c6aebde0 100644
--- 
a/components/camel-ai/camel-weaviate/src/test/java/org/apache/camel/component/weaviate/it/WeaviateComponentIT.java
+++ 
b/components/camel-ai/camel-weaviate/src/test/java/org/apache/camel/component/weaviate/it/WeaviateComponentIT.java
@@ -86,8 +86,8 @@ public class WeaviateComponentIT extends CamelTestSupport {
         Result<WeaviateObject> res = (Result<WeaviateObject>) 
result.getIn().getBody();
         CREATEID = res.getResult().getId();
 
-        assertThat(!res.hasErrors());
-        assertThat(res != null);
+        assertThat(res.hasErrors()).isFalse();
+        assertThat(res).isNotNull();
     }
 
     @Test
@@ -104,14 +104,14 @@ public class WeaviateComponentIT extends CamelTestSupport 
{
         assertThat(result).isNotNull();
         assertThat(result.getException()).isNull();
         Result<WeaviateObject> res = (Result<WeaviateObject>) 
result.getIn().getBody();
-        assertThat(!res.hasErrors());
+        assertThat(res.hasErrors()).isFalse();
 
         List<WeaviateObject> list = (List) res.getResult();
         for (WeaviateObject wo : list) {
 
             Map<String, Object> map = wo.getProperties();
-            assertThat(map.containsKey("sky"));
-            assertThat(map.containsKey("age"));
+            assertThat(map).containsKey("sky");
+            assertThat(map).containsKey("age");
         }
 
     }
@@ -137,8 +137,8 @@ public class WeaviateComponentIT extends CamelTestSupport {
         assertThat(result).isNotNull();
 
         Result<Boolean> res = (Result<Boolean>) result.getIn().getBody();
-        assertThat(!res.hasErrors());
-        assertThat(res.getResult() == true);
+        assertThat(res.hasErrors()).isFalse();
+        assertThat(res.getResult()).isTrue();
         assertThat(result.getException()).isNull();
     }
 
@@ -163,9 +163,9 @@ public class WeaviateComponentIT extends CamelTestSupport {
 
         assertThat(result).isNotNull();
         List<Float> vector = (List<Float>) result.getIn().getBody();
-        assertThat(vector.get(0) == 1.0f);
-        assertThat(vector.get(1) == 2.0f);
-        assertThat(vector.get(2) == 3.0f);
+        assertThat(vector.get(0)).isEqualTo(1.0f);
+        assertThat(vector.get(1)).isEqualTo(2.0f);
+        assertThat(vector.get(2)).isEqualTo(3.2f);
     }
 
     @Test
@@ -182,8 +182,8 @@ public class WeaviateComponentIT extends CamelTestSupport {
         assertThat(result).isNotNull();
         Result<Boolean> res = (Result<Boolean>) result.getIn().getBody();
 
-        assertThat(!res.hasErrors());
-        assertThat(res.getResult() == true);
+        assertThat(res.hasErrors()).isFalse();
+        assertThat(res.getResult()).isTrue();
         assertThat(result.getException()).isNull();
     }
 
@@ -198,8 +198,8 @@ public class WeaviateComponentIT extends CamelTestSupport {
 
         assertThat(result).isNotNull();
         Result<Boolean> res = (Result<Boolean>) result.getIn().getBody();
-        assertThat(!res.hasErrors());
-        assertThat(res.getResult() == true);
+        assertThat(res.hasErrors()).isFalse();
+        assertThat(res.getResult()).isTrue();
         assertThat(result.getException()).isNull();
     }
 
diff --git 
a/components/camel-ai/camel-weaviate/src/test/java/org/apache/camel/component/weaviate/it/WeaviateContainerIT.java
 
b/components/camel-ai/camel-weaviate/src/test/java/org/apache/camel/component/weaviate/it/WeaviateContainerIT.java
index 500031e078a..b893109dad9 100644
--- 
a/components/camel-ai/camel-weaviate/src/test/java/org/apache/camel/component/weaviate/it/WeaviateContainerIT.java
+++ 
b/components/camel-ai/camel-weaviate/src/test/java/org/apache/camel/component/weaviate/it/WeaviateContainerIT.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.weaviate.it;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import io.weaviate.client.base.Result;
 import io.weaviate.client.v1.data.model.WeaviateObject;
@@ -56,8 +57,8 @@ public class WeaviateContainerIT extends WeaviateTestSupport {
 
         assertThat(result).isNotNull();
         Result<Boolean> res = (Result<Boolean>) result.getIn().getBody();
-        assertThat(!res.hasErrors());
-        assertThat(res.getResult() == true);
+        assertThat(res.hasErrors()).isFalse();
+        assertThat(res.getResult()).isTrue();
         assertThat(result.getException()).isNull();
     }
 
@@ -84,8 +85,8 @@ public class WeaviateContainerIT extends WeaviateTestSupport {
         Result<WeaviateObject> res = (Result<WeaviateObject>) 
result.getIn().getBody();
         CREATEID = res.getResult().getId();
 
-        assertThat(!res.hasErrors());
-        assertThat(res != null);
+        assertThat(res.hasErrors()).isFalse();
+        assertThat(res).isNotNull();
     }
 
     @Test
@@ -109,9 +110,9 @@ public class WeaviateContainerIT extends 
WeaviateTestSupport {
 
         assertThat(result).isNotNull();
         List<Float> vector = (List<Float>) result.getIn().getBody();
-        assertThat(vector.get(0) == 1.0f);
-        assertThat(vector.get(1) == 2.0f);
-        assertThat(vector.get(2) == 3.0f);
+        assertThat(vector.get(0)).isEqualTo(1.0f);
+        assertThat(vector.get(1)).isEqualTo(2.0f);
+        assertThat(vector.get(2)).isEqualTo(3.2f);
     }
 
     @Test
@@ -128,11 +129,64 @@ public class WeaviateContainerIT extends 
WeaviateTestSupport {
         assertThat(result).isNotNull();
         Result<Boolean> res = (Result<Boolean>) result.getIn().getBody();
 
-        assertThat(!res.hasErrors());
-        assertThat(res.getResult() == true);
+        assertThat(res.hasErrors()).isFalse();
+        assertThat(res.getResult()).isTrue();
         assertThat(result.getException()).isNull();
     }
 
+    @Test
+    @Order(7)
+    public void updateById() {
+
+        List<Float> elements = Arrays.asList(1.0f, 2.0f, 3.0f);
+
+        HashMap<String, String> map = new HashMap<String, String>();
+        map.put("dog", "dachshund");
+
+        Exchange result = fluentTemplate.to(
+                "weaviate:test-collection")
+                .withHeader(WeaviateVectorDb.Headers.ACTION, 
WeaviateVectorDbAction.UPDATE_BY_ID)
+                .withBody(elements)
+                .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME, 
COLLECTION)
+                .withHeader(WeaviateVectorDb.Headers.INDEX_ID, CREATEID)
+                .withHeader(WeaviateVectorDb.Headers.PROPERTIES, map)
+                .request(Exchange.class);
+
+        assertThat(result).isNotNull();
+
+        Result<Boolean> res = (Result<Boolean>) result.getIn().getBody();
+        assertThat(res.hasErrors()).isFalse();
+        assertThat(res.getResult()).isTrue();
+        assertThat(result.getException()).isNull();
+    }
+
+    @Test
+    @Order(8)
+    public void queryById() {
+
+        Exchange result = fluentTemplate.to(
+                "weaviate:test-collection")
+                .withHeader(WeaviateVectorDb.Headers.ACTION, 
WeaviateVectorDbAction.QUERY_BY_ID)
+                .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME, 
COLLECTION)
+                .withHeader(WeaviateVectorDb.Headers.INDEX_ID, CREATEID)
+                .request(Exchange.class);
+
+        assertThat(result).isNotNull();
+        assertThat(result.getException()).isNull();
+        Result<WeaviateObject> res = (Result<WeaviateObject>) 
result.getIn().getBody();
+        assertThat(res.hasErrors()).isFalse();
+
+        List<WeaviateObject> list = (List) res.getResult();
+        for (WeaviateObject wo : list) {
+
+            Map<String, Object> map = wo.getProperties();
+            assertThat(map).containsKey("sky");
+            assertThat(map).containsKey("age");
+            assertThat(map).containsKey("dog");
+        }
+
+    }
+
     @Test
     @Order(10)
     public void deleteCollection() {
@@ -144,8 +198,8 @@ public class WeaviateContainerIT extends 
WeaviateTestSupport {
 
         assertThat(result).isNotNull();
         Result<Boolean> res = (Result<Boolean>) result.getIn().getBody();
-        assertThat(!res.hasErrors());
-        assertThat(res.getResult() == true);
+        assertThat(res.hasErrors()).isFalse();
+        assertThat(res.getResult()).isTrue();
         assertThat(result.getException()).isNull();
     }
 
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WeaviateVectorDbEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WeaviateVectorDbEndpointBuilderFactory.java
index b231773980b..7510b92a6b0 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WeaviateVectorDbEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/WeaviateVectorDbEndpointBuilderFactory.java
@@ -426,6 +426,19 @@ public interface WeaviateVectorDbEndpointBuilderFactory {
         public String weaviateQueryTopK() {
             return "CamelWeaviateQueryTopK";
         }
+        /**
+         * Merges properties into the object.
+         * 
+         * The option is a: {@code Boolean} type.
+         * 
+         * Default: true
+         * Group: producer
+         * 
+         * @return the name of the header {@code WeaviateUpdateWithMerge}.
+         */
+        public String weaviateUpdateWithMerge() {
+            return "CamelWeaviateUpdateWithMerge";
+        }
     }
     static WeaviateVectorDbEndpointBuilder endpointBuilder(String 
componentName, String path) {
         class WeaviateVectorDbEndpointBuilderImpl extends 
AbstractEndpointBuilder implements WeaviateVectorDbEndpointBuilder, 
AdvancedWeaviateVectorDbEndpointBuilder {

Reply via email to