Building a RAG application using Spring AI 1.0.0.M1 version, Ollama & Milvus 2.3.0 vector store running as a docker container
Application is able to insert the document; however when I execute below statement for the retrieval
List documents = vectorStore.similaritySearch(SearchRequest.defaults()
.query(question.question()).withTopK(5));
key name when I debug is ‘distance’
I get following exception,
io.milvus.exception.ParamException: The key name is not found
at io.milvus.response.QueryResultsWrapper$RowRecord.get(QueryResultsWrapper.java:158) ~[milvus-sdk-java-2.4.2.jar!/:na]
at org.springframework.ai.vectorstore.MilvusVectorStore.getResultSimilarity(MilvusVectorStore.java:373) ~[spring-ai-milvus-store-1.0.0-M1.jar!/:na]
at org.springframework.ai.vectorstore.MilvusVectorStore.lambda$similaritySearch$1(MilvusVectorStore.java:360) ~[spring-ai-milvus-store-1.0.0-M1.jar!/:na]
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178) ~[na:na]
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) ~[na:na]
at org.springframework.ai.vectorstore.MilvusVectorStore.similaritySearch(MilvusVectorStore.java:369) ~[spring-ai-milvus-store-1.0.0-M1.jar!/:na]
at com.rbc.newton.ai.rag.services.OllamaAIServiceImpl.getAnswer(OllamaAIServiceImpl.java:59) ~[!/:0.0.1-SNAPSHOT]
at com.rbc.newton.ai.rag.controller.QueryController.askQuestion(QueryController.java:20) ~[!/:0.0.1-SNAPSHOT]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) ~[spring-web-6.1.11.jar!/:6.1.11]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) ~[spring-web-6.1.11.jar!/:6.1.11]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.11.jar!/:6.1.11]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) ~[spring-webmvc-6.1.11.jar!/:6.1.11]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) ~[spring-webmvc-6.1.11.jar!/:6.1.11]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.11.jar!/:6.1.11]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.11.jar!/:6.1.11]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.11.jar!/:6.1.11]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.11.jar!/:6.1.11]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) ~[spring-webmvc-6.1.11.jar!/:6.1.11]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) ~[tomcat-embed-core-10.1.26.jar!/:na]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.11.jar!/:6.1.11]
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.26.jar!/:na]
Created a new Collection in the default Milvus vector store as shown below,
ConnectConfig connectConfig = ConnectConfig.builder()
.uri(CLUSTER_ENDPOINT)
.build();
MilvusClientV2 client = new MilvusClientV2(connectConfig);
CreateCollectionReq.CollectionSchema schema = client.createSchema();
schema.addField(AddFieldReq.builder()
.fieldName("embedding")
.dataType(DataType.FloatVector)
.dimension(1024)
.description("vector embedding")
.build());
schema.addField(AddFieldReq.builder()
.fieldName("id")
.dataType(DataType.Int64)
.isPrimaryKey(true)
.autoID(true)
.build());
CreateCollectionReq quickSetupReq = CreateCollectionReq.builder()
.collectionName(collection_name)
.collectionSchema(schema)
.dimension(1024)
.vectorFieldName("embedding")
.metricType("COSINE")
.enableDynamicField(true)
.build();
client.createCollection(quickSetupReq);
IndexParam indexParamForVectorField = IndexParam.builder()
.fieldName("embedding")
.indexName("vector_index")
.indexType(IndexParam.IndexType.IVF_FLAT)
.metricType(IndexParam.MetricType.COSINE)
.extraParams(Map.of("nlist", 1, "nprobe", 1))
.build();
List<IndexParam> indexParams = new ArrayList<>();
indexParams.add(indexParamForVectorField);
CreateIndexReq createIndexReq = CreateIndexReq.builder()
.collectionName(collection_name)
.indexParams(indexParams)
.build();
client.createIndex(createIndexReq);
Tried different parameters to create the Collection; however still get the same exception, where key name is distance. I have not created any distance field,
io.milvus.exception.ParamException: The key name is not found
at io.milvus.response.QueryResultsWrapper$RowRecord.get(QueryResultsWrapper.java:158) ~[milvus-sdk-java-2.4.2.jar!/:na]
user26841525 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.