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 {