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 <ondrusek.j...@gmail.com>
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&param=value2&param=value3", 
RestProducer.createQueryParameters("param={multiple}", exchange));
+        assertEquals("param=value1&param=value2&param=value3",
+                RestProducer.createQueryParameters("param={multiple}", 
exchange));
     }
 
     @Test

Reply via email to