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 6670c0b5d56 CAMEL-22142 camel-weaviate fixed query by vector (#18272)
6670c0b5d56 is described below
commit 6670c0b5d5619b04bc0175c651265cac8d429e60
Author: JiriOndrusek <[email protected]>
AuthorDate: Wed Jun 4 16:36:13 2025 +0200
CAMEL-22142 camel-weaviate fixed query by vector (#18272)
---
.../weaviate/WeaviateVectorDbProducer.java | 8 +-
.../component/weaviate/it/WeaviateComponentIT.java | 179 +--------------------
.../component/weaviate/it/WeaviateContainerIT.java | 118 +++++++-------
.../camel/component/rest/RestProducerTest.java | 4 +-
4 files changed, 70 insertions(+), 239 deletions(-)
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 0edb41b2380..fba392a9c19 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
@@ -16,7 +16,6 @@
*/
package org.apache.camel.component.weaviate;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ExecutorService;
@@ -249,11 +248,8 @@ public class WeaviateVectorDbProducer extends
DefaultProducer {
if (in.getHeader(WeaviateVectorDb.Headers.FIELDS, HashMap.class) !=
null) {
HashMap<String, Object> fieldToSearch =
in.getHeader(WeaviateVectorDb.Headers.FIELDS, HashMap.class);
- List<Field> fieldList = new ArrayList<>();
- for (String key : fieldToSearch.keySet()) {
- fieldList.add(Field.builder().name(key).build());
- }
- Field[] fieldArray = (Field[]) fieldList.toArray();
+ Field[] fieldArray
+ = fieldToSearch.keySet().stream().map(k ->
Field.builder().name(k).build()).toArray(Field[]::new);
fields = Fields.builder().fields(fieldArray).build();
} else {
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 d61c6aebde0..7aa46a3e301 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
@@ -16,191 +16,16 @@
*/
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;
-import org.apache.camel.Exchange;
-import org.apache.camel.component.weaviate.WeaviateVectorDb;
-import org.apache.camel.component.weaviate.WeaviateVectorDbAction;
-import org.apache.camel.test.junit5.CamelTestSupport;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.condition.EnabledIfSystemProperties;
import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
-import static org.assertj.core.api.Assertions.assertThat;
-
-// Must be manually tested. Provide your own accessKey and secretKey using
-Dweaviate.token
-// Example :
+// Must be manually tested. Provide your own accessKey and secretKey according
the example :
// mvn -Dweaviate.apikey=YOURAPIKEY -Dweaviate.host=YOURHOST
-Dweaviate.scheme=https verify
@EnabledIfSystemProperties({
@EnabledIfSystemProperty(named = "weaviate.apikey", matches = ".*",
disabledReason = "weaviate API Key not provided"),
})
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
-public class WeaviateComponentIT extends CamelTestSupport {
-
- private static final String COLLECTION = "WeaviateComponentITCollection";
- private static String CREATEID = null;
-
- @Test
- @Order(1)
- public void createCollection() {
-
- Exchange result = fluentTemplate
-
.to("weaviate:test-collection?scheme={{weaviate.scheme}}&host={{weaviate.host}}&apiKey={{weaviate.apikey}}")
- .withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.CREATE_COLLECTION)
- .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
- .request(Exchange.class);
-
- assertThat(result).isNotNull();
- Result<Boolean> res = (Result<Boolean>) result.getIn().getBody();
- assertThat(!res.hasErrors());
- assertThat(res.getResult() == true);
- assertThat(result.getException()).isNull();
- }
-
- @Test
- @Order(2)
- public void create() {
-
- List<Float> elements = Arrays.asList(1.0f, 2.0f, 3.0f);
-
- HashMap<String, String> map = new HashMap<String, String>();
- map.put("sky", "blue");
- map.put("age", "34");
-
- Exchange result = fluentTemplate.to(
-
"weaviate:test-collection?scheme={{weaviate.scheme}}&host={{weaviate.host}}&apiKey={{weaviate.apikey}}")
- .withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.CREATE)
- .withBody(elements)
- .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
- .withHeader(WeaviateVectorDb.Headers.PROPERTIES, map)
- .request(Exchange.class);
-
- assertThat(result).isNotNull();
-
- Result<WeaviateObject> res = (Result<WeaviateObject>)
result.getIn().getBody();
- CREATEID = res.getResult().getId();
-
- assertThat(res.hasErrors()).isFalse();
- assertThat(res).isNotNull();
- }
-
- @Test
- @Order(7)
- public void queryById() {
-
- Exchange result = fluentTemplate.to(
-
"weaviate:test-collection?scheme={{weaviate.scheme}}&host={{weaviate.host}}&apiKey={{weaviate.apikey}}")
- .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");
- }
-
- }
-
- @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?scheme={{weaviate.scheme}}&host={{weaviate.host}}&apiKey={{weaviate.apikey}}")
- .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 queryByVector() {
-
- List<Float> elements = Arrays.asList(1.0f, 2.0f, 3.2f);
-
- HashMap<String, String> map = new HashMap<String, String>();
- map.put("sky", "blue");
-
- Exchange result = fluentTemplate.to(
-
"weaviate:test-collection?scheme={{weaviate.scheme}}&host={{weaviate.host}}&apiKey={{weaviate.apikey}}")
- .withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.QUERY)
- .withBody(
- elements)
- .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
- .withHeader(WeaviateVectorDb.Headers.QUERY_TOP_K, 20)
- .withHeader(WeaviateVectorDb.Headers.FIELDS, map)
- .request(Exchange.class);
-
- assertThat(result).isNotNull();
- List<Float> vector = (List<Float>) result.getIn().getBody();
- assertThat(vector.get(0)).isEqualTo(1.0f);
- assertThat(vector.get(1)).isEqualTo(2.0f);
- assertThat(vector.get(2)).isEqualTo(3.2f);
- }
-
- @Test
- @Order(9)
- public void deleteById() {
-
- Exchange result = fluentTemplate.to(
-
"weaviate:test-collection?scheme={{weaviate.scheme}}&host={{weaviate.host}}&apiKey={{weaviate.apikey}}")
- .withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.DELETE_BY_ID)
- .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
- .withHeader(WeaviateVectorDb.Headers.INDEX_ID, CREATEID)
- .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(10)
- public void deleteCollection() {
- Exchange result = fluentTemplate
-
.to("weaviate:test-collection?scheme={{weaviate.scheme}}&host={{weaviate.host}}&apiKey={{weaviate.apikey}}")
- .withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.DELETE_COLLECTION)
- .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
- .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();
- }
-
+public class WeaviateComponentIT extends WeaviateContainerIT {
}
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 b893109dad9..7c51bb9c4f7 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
@@ -23,11 +23,15 @@ import java.util.Map;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.data.model.WeaviateObject;
+import io.weaviate.client.v1.graphql.model.GraphQLResponse;
import org.apache.camel.Exchange;
import org.apache.camel.component.weaviate.WeaviateTestSupport;
import org.apache.camel.component.weaviate.WeaviateVectorDb;
import org.apache.camel.component.weaviate.WeaviateVectorDbAction;
-import org.junit.jupiter.api.*;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.condition.DisabledIfSystemProperties;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
@@ -42,7 +46,7 @@ import static org.assertj.core.api.Assertions.assertThat;
})
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class WeaviateContainerIT extends WeaviateTestSupport {
- private static final String COLLECTION = "WeaviateComponentITCollection";
+ private static final String COLLECTION = "WeaviateITCollection";
private static String CREATEID = null;
@Test
@@ -50,7 +54,7 @@ public class WeaviateContainerIT extends WeaviateTestSupport {
public void createCollection() {
Exchange result = fluentTemplate
- .to("weaviate:test-collection")
+ .to(getUri())
.withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.CREATE_COLLECTION)
.withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
.request(Exchange.class);
@@ -73,7 +77,7 @@ public class WeaviateContainerIT extends WeaviateTestSupport {
map.put("age", "34");
Exchange result = fluentTemplate
- .to("weaviate:test-collection")
+ .to(getUri())
.withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.CREATE)
.withBody(elements)
.withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
@@ -89,51 +93,6 @@ public class WeaviateContainerIT extends WeaviateTestSupport
{
assertThat(res).isNotNull();
}
- @Test
- @Order(8)
- public void queryByVector() {
-
- List<Float> elements = Arrays.asList(1.0f, 2.0f, 3.2f);
-
- HashMap<String, String> map = new HashMap<String, String>();
- map.put("sky", "blue");
-
- Exchange result = fluentTemplate
- .to("weaviate:test-collection")
- .withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.QUERY)
- .withBody(
- elements)
- .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
- .withHeader(WeaviateVectorDb.Headers.QUERY_TOP_K, 20)
- .withHeader(WeaviateVectorDb.Headers.FIELDS, map)
- .request(Exchange.class);
-
- assertThat(result).isNotNull();
- List<Float> vector = (List<Float>) result.getIn().getBody();
- assertThat(vector.get(0)).isEqualTo(1.0f);
- assertThat(vector.get(1)).isEqualTo(2.0f);
- assertThat(vector.get(2)).isEqualTo(3.2f);
- }
-
- @Test
- @Order(9)
- public void deleteById() {
-
- Exchange result = fluentTemplate
- .to("weaviate:test-collection")
- .withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.DELETE_BY_ID)
- .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
- .withHeader(WeaviateVectorDb.Headers.INDEX_ID, CREATEID)
- .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(7)
public void updateById() {
@@ -143,8 +102,7 @@ public class WeaviateContainerIT extends
WeaviateTestSupport {
HashMap<String, String> map = new HashMap<String, String>();
map.put("dog", "dachshund");
- Exchange result = fluentTemplate.to(
- "weaviate:test-collection")
+ Exchange result = fluentTemplate.to(getUri())
.withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.UPDATE_BY_ID)
.withBody(elements)
.withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
@@ -164,8 +122,7 @@ public class WeaviateContainerIT extends
WeaviateTestSupport {
@Order(8)
public void queryById() {
- Exchange result = fluentTemplate.to(
- "weaviate:test-collection")
+ Exchange result = fluentTemplate.to(getUri())
.withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.QUERY_BY_ID)
.withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
.withHeader(WeaviateVectorDb.Headers.INDEX_ID, CREATEID)
@@ -187,11 +144,56 @@ public class WeaviateContainerIT extends
WeaviateTestSupport {
}
+ @SuppressWarnings("unchecked")
+ @Test
+ @Order(8)
+ public void queryByVector() {
+
+ List<Float> elements = Arrays.asList(1.0f, 2.0f, 3.2f);
+
+ HashMap<String, String> map = new HashMap<String, String>();
+ map.put("sky", "blue");
+
+ Exchange result = fluentTemplate
+ .to(getUri())
+ .withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.QUERY)
+ .withBody(
+ elements)
+ .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
+ .withHeader(WeaviateVectorDb.Headers.QUERY_TOP_K, 20)
+ .withHeader(WeaviateVectorDb.Headers.FIELDS, map)
+ .request(Exchange.class);
+
+ assertThat(result).isNotNull();
+ GraphQLResponse<?> qlResponse = (GraphQLResponse<?>)
result.getIn().getBody(Result.class).getResult();
+ var dataMap = (Map<String, Map<String, List<Map<String, String>>>>)
qlResponse.getData();
+
assertThat(dataMap.get("Get").get(COLLECTION).get(0)).containsEntry("sky",
"blue");
+ }
+
+ @Test
+ @Order(9)
+ public void deleteById() {
+
+ Exchange result = fluentTemplate
+ .to(getUri())
+ .withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.DELETE_BY_ID)
+ .withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
+ .withHeader(WeaviateVectorDb.Headers.INDEX_ID, CREATEID)
+ .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(10)
public void deleteCollection() {
Exchange result = fluentTemplate
- .to("weaviate:test-collection")
+ .to(getUri())
.withHeader(WeaviateVectorDb.Headers.ACTION,
WeaviateVectorDbAction.DELETE_COLLECTION)
.withHeader(WeaviateVectorDb.Headers.COLLECTION_NAME,
COLLECTION)
.request(Exchange.class);
@@ -203,4 +205,12 @@ public class WeaviateContainerIT extends
WeaviateTestSupport {
assertThat(result.getException()).isNull();
}
+ private String getUri() {
+ if (System.getProperties().containsKey("weaviate.apikey")) {
+ return
"weaviate:test-collection?scheme={{weaviate.scheme}}&host={{weaviate.host}}&apiKey={{weaviate.apikey}}";
+ }
+
+ return "weaviate:test-collection";
+ }
+
}
diff --git
a/core/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java
b/core/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java
index bb1a5866ed9..16b2c4ce84f 100644
---
a/core/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/component/rest/RestProducerTest.java
@@ -24,7 +24,6 @@ import java.util.Collections;
import org.apache.camel.CamelContext;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.support.DefaultExchange;
-import org.apache.camel.support.DefaultMessage;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -39,7 +38,8 @@ public class RestProducerTest {
DefaultExchange exchange = new DefaultExchange(camelContext);
exchange.getMessage().setHeader("multiple", Arrays.asList("value1",
"value2", "value3"));
- assertEquals("param=value1¶m=value2¶m=value3",
RestProducer.createQueryParameters("param={multiple}", exchange));
+ assertEquals("param=value1¶m=value2¶m=value3",
+ RestProducer.createQueryParameters("param={multiple}",
exchange));
}
@Test