开发者

Spring Boot集成Milvus快速入门demo示例详解

开发者 https://www.devze.com 2024-09-26 10:32 出处:网络 作者: HBLOGA
目录1.什么是Milvus?是什么让 Milvus 具有如此高的可扩展性Milvus 支持的搜索类型2.测试环境搭建3.代码工程实验目的4.测试5.引用1.什么是Milvus?
目录
  • 1.什么是Milvus?
    • 是什么让 Milvus 具有如此高的可扩展性
    • Milvus 支持的搜索类型
  • 2.测试环境搭建
    • 3.代码工程
      • 实验目的
    • 4.测试
      • 5.引用

        1.什么是Milvus?

        Milvus 是一种高性能、高扩展性的向量数据库,可在从笔记本电脑到大型分布式系统等各种环境中高效运行。它既可以开源软件的形式提供,也可以云服务的形式提供。 Milvus 是 LF AI & Data Foundation 下的一个开源项目,以 Apache 2.0 许可发布。大多数贡献者都是高性能计算(HPC)领域的专家,擅长构建大型系统和优化硬件感知代码。核心贡献者包括来自 Zilliz、ARM、NVIDIA、AMD、英特尔、Meta、IBM、Salesforce、阿里巴巴和微软的专业人士

        是什么让 Milvus 具有如此高的可扩展性

        2022 年,Milvus 支持十亿级向量,2023 年,它以持续稳定的方式扩展到数百亿级,为 300 多家大型企业的大规模场景提供支持,包括 Salesforce、PayPal、Shopee、Airbnb、eBay、NVIDIA、IBM、AT&T、LINE、ROBLOX、Inflection 等。 Milvus 的云原生和高度解耦的系统架构确保了系统可以随着数据的增长而不断扩展:

        Spring Boot集成Milvus快速入门demo示例详解

          Milvus 本身是完全无状态的,因此可以借助 Kubernetes 或公共云轻松扩展。此外,Milvus 的各个组件都有很好的解耦,其中最关键的三项任务--搜索、数据插入和索引/压实--被设计为易于并行化的流程,复杂的逻辑被分离出来。这确保了相应的查询节点、数据节点和索引节点可以独立地向上和向下扩展,从而优化了性能和成本效率。

        Milvus 支持的搜索类型

        Milvus 支持各种类型的搜索功能,以满足不同用例的需求:

        ANN 搜索:查找最接近查询向量的前 K 个向量。

        过滤搜索:在指定的过滤条件下执行 ANN 搜索。

        范围搜索:查找查询向量指定半径范围内的向量。

        混合搜索:基于多个向量场进行 ANN 搜索。关键词搜索基于 BM25 的关键词搜索。

        重新排序根据附加标准或辅助算法调整搜索结果的顺序,完善最初的 ANN 搜索结果。

        获取:根据主键检索数据。

        查询使用特定表达式检索数据。

        2.测试环境搭建

        • First, we’ll need an instance of Milvus DB. The easiest and quickest way is to get a fully managed free Milvus DB instance provided by Zilliz Cloud: Vector Database built for enterprise-grade AI applications - Zilliz
        • For this, we’ll need to register for a Zilliz cloud account and follow the documentation for creating a free DB cluster.

        Spring Boot集成Milvus快速入门demo示例详解

        3.代码工程

        实验目的

        实现对Milvus向量数据库的的crud

        pom.XML

        <?xml version="1.0" encoding="UTF-8"?>
        <project xmlns="http://maven.apache.org/POM/4.0.0"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>3.2.1</version>
            </parent>
            <modelVersion>4.0.0</modelVersion>
            <artifactId>Milvus</artifactId>
            <properties>
                <maven.compiler.source>17</maven.compiler.source>
                <maven.compiler.target>17</maven.compiler.target>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-autoconfigure</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-test</artifactId>
                    <scope>test</scope>
                </dependency>
                <dependency>
                    <groupId>io.milvus</groupId>
                    <artifactId>milvus-sdk-Java</artifactId>
                    <version>2.4.1</version>
                </dependency>
            </dependencies>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-compiler-plugin</artifactId>
                            <version>3.8.1</version>
                            <configuration>
                                <fork>true</fork>
                                <failOnError>false</failOnError>
                            </configuration>
                        </plugin>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-surefire-plugin</artifactId>
                            <version>2.22.2</version>
                            <configuration>
                                <forkCount>0</forkCount>
                                <failIfNoTests>false<http://www.devze.com/failIfNoTests>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </project>

        controller

        package com.et.controller;
        import com.et.service.HelloZillizVectorDBService;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RestController;
        import java.util.HashMap;
        import java.util.Map;
        @RestController
        public class HelloWorldController {
           @Autowired
           HelloZillizVectorDBService helloZillizVectorDBService;
            @RequestMapping("/hello")
            public Map<String, Object> showHelloWorld(){
                Map<String, Object> map = new HashMap<>();
              helloZillizVectorDBService.search();
                map.put("msg", "HelloWorld");
                return map;
            }
        }

        service

        package com.et.service;
        import io.milvus.client.MilvusServiceClient;
        import io.milvus.grpc.DataType;
        import io.milvus.grpc.DescribeCollectionResponse;
        import io.milvus.grpc.MutationResult;
        import io.milvus.grpc.SearchResults;
        import io.milvus.param.*;
        import io.milvus.param.collection.*;
        import io.milvus.param.dml.InsertParam;
        import io.milvus.param.dml.SearchParam;
        import io.milvus.param.index.CreateIndexParam;
        import org.springframework.beans.factory.annotation.Value;
        import org.springframework.stereotype.Service;
        import java.util.*;
        @Service
        public class HelloZillizVectorDBService {
           @Value("${uri}")
           public String uri;
           @Value("${token}")
           public String token;
            public  void search() {
                // connect to milvus
                final MilvusServiceClient milvusClient = new MilvusServiceClient(
                        ConnectParam.newBuilder()
                                .withUri(uri)
                                .withToken(token)
                                .build());
                System.out.println("Connecting to DB: " + uri);
                // Check if the collection exists
                String collectionName = "book";
                R<DescribeCollectionResponse> responseR =
                        milvusClient.describeCollection(DescribeCollectionParam.newBuilder().withCollectionName(collectionName).build());
                if (responseR.getData() != null) {
                    milvusClient.dropCollection(DropCollectionParam.newBuilder().withCollectionName(collectionName).build());
                }
                System.out.println("Success!");
                // create a collection with customized primary field: book_id_field
                int dim = 64;
                FieldType bookIdField = FieldType.newBuilder()
                        .withName("book_id")
                        .withDataType(DataType.Int64)
                        .withPrimaryKey(true)
                        .withAutoID(false)
                        .build();
                FieldType wordCountField = FieldType.newBuilder()
                        .withName("word_count")
                        .withDataType(DataType.Int64)
                        .build();
                FieldType bookIntroField = FieldType.newBuilder()
                        .withName("book_intro")
                        .withDataType(DataType.FloatVector)
                        .withDimension(dim)
                        .build();
                CreateCollectionParam createCollectionParam = CreateCollectionParam.newBuilder()
                        .withCollectionName(collectionName)
                        .withDescription("my first collection")
                        .withShards编程客栈Num(2)
                        .addFieldType(bookIdField)
                        .addFieldType(wordCountField)
                        .addFieldType(bookIntroField)
                        .build();
                System.out.println("Creating example collection: " + collectionName);
                System.out.println("Schema: " + createCollectionParam);
                milvusClient.createCollection(createCollectionParam);
                System.out.println("Success!");
                //insert data with customized ids
                Random ran = new Random();
                int singleNum = 1000;
                int insertRounds = 2;
                long insertTotalTime = 0L;
                System.out.println("Inserting " + singleNum * insertRounds + " entities... ");
                for (int r = 0; r < insertRounds; r++) {
                    List<Long> book_id_array = new ArrayList<>();
                    List<Long> word_count_array = new ArrayList<>();
                    List<List<Float>> book_intro_array = new ArrayList<>();
                    for (long i = r * singleNum; i < (r + 1) * singleNum; ++i) {
                        book_id_array.add(i);
                        word_count_array.add(i + 10000);
                        List<Float> vector = new ArrayList<>();
                        for (int k = 0; k < dim; ++k) {
                            vector.add(ran.nextFloat());
                        }
                        book_intro_array.add(vector);
                    }
                    List<InsertParam.Field> fields = new ArrayList<>();
                    fields.add(new InsertParam.Field(bookIdField.getName(), book_id_array));
                    fields.add(new InsertParam.Field(wordCountField.getName(), word_count_array));
                    fields.add(new InsertParam.Field(bookIntroField.getName(), book_intro_array));
                    InsertParam insertParam = InsertParam.newBuilder()
                            .withCollectionName(collectionName)
                            .withFields(fields)
                            .build();
                    long startTime = System.currentTimeMillis();
                    R<MutationResult> insertR = milvusClient.insert(insertParam);
                    long endTime = System.currentTimeMillis();
                    insertTotalTime += (endTime - startTime) / 1000.00;
                }
                System.out.println("Succeed in " + insertTotalTime + " seconds!");
                // flush data
                System.out.println("Flushing...");
                long startFlushTime = System.currentTimeMillis();
                milvusClient.flush(FlushParam.newBuilder()
                        .withCollectionNames(Collections.singletonList(collectionName))
                        .withSyncFlush(true)
                        .withSyncFlushWaitingInterval(50L)
                        .withSyncFlushWaitingTimeout(30L)
                        .build());
                long endFlushTime = System.currentTimeMillis();
                System.out.println("Succeed in " + (endFlushTime - startFlushTime) / 1000.00 + " seconds!");
                // build index
                System.out.println("Building AutoIndex...");
                final IndexType INDEX_TYPE = IndexType.AUTOINDEX;   // IndexType
                long startIndexTime = System.currentTimeMillis();
                R<RpcStatus> indexR = milvusClient.createIndex(
                        CreateIndexParam.newBuilder()
                                .withCollectionName(collectionName)
                                .withFieldName(bookIntroField.getName())
                                .withIndexType(INDEX_TYPE)
                                .withMetricType(MetricType.L2)
                                .withSyncMode(Boolean.TRUE)
                                .withSyncWaitingInterval(500L)
                                .withSyncWaitingTimeout(30L)
                                .build());
                long endIndexTime = System.currentTimeMillis();
                System.out.println("Succeed in " + (endIndexTime - startIndexTime) / 1000.00 + " seconds!");
                // load collection
                System.out.println("Loading collection...");
                long startLoadTime = System.currentTimeMillis();
                milvusClient.loadCollection(LoadCollectionParam.newBuilder()
                        .withCollectionName(collectionName)
                        .withSyncLoad(trujse)
                        .withSyncLoadwaitingInterval(500L)
                        .withSyncLoadWaitingTimeout(100L)
                        .build());
                long endLoadTime = System.currentTimeMillis();
                System.out.println("Succeed in " + (endLoadTime - startLoadTime) / 1000.00 + " seconds");
                // search
                final Integer SEARCH_K = 2;                       // TopK
                final String SEARCH_PARAM = "{\"nprobe\":10}";    // Params
                List<String> search_output_fields = Arrays.asList("book_id", "word_count");
                for (int i = 0; i < 10; i++) {
                    List<Float> floatList = new ArrayList<>();
                    for (int k = 0; k < dim; ++k) {
                        floatList.add(ran.nextFloat());
                    }
                    List<List<Float>> search_vectors = Collections.singletonList(floatList);
                    SearchParam searchParam = SearchParam.newBuilder()
                            .withCollectionName(collectionName)
                            .withMetricType(MetricType.L2)
                            .withOutFields(search_output_fields)
                            .withTopK(SEARCH_K)
                            .withVectors(search_vectors)
                            .withVectorFieldName(bookIntroField.getName())
                            .withParams(SEARCH_PARAM)
                            .build();
                    long startSearchTime = System.currentTimeMillis();
                    R<SearchResults> search = milvusClient.search(searchParam);
                    long endSearchTime = System.currentTimeMillis();
                    System.out.println("Searching vector: " + search_vectors);
                    System.out.println("Result: " + search.getData().getResults().getFieldsDataList());
                    System.out.println("search " + i + " latency: " + (endSearchTime - startSearchTime) / 1000.00 + " seconds");
                }
                milvusClient.close();
            }
        }

        application.yaml

        用实际的值替换下面的参数

        uri = https://in01-XXXXXXXXXXXXX.aws-us-west-2.vectordb.zillizcloud.com:XXXXX
        token = db_admin:password (or ApiKey)

        只是一些关键代码,所有代码请参见下面代码仓库

        代码仓库

        github - Harries/springboot-demo: a simple springboot demo with some components for example: Redis,solr,rockmq and so on.(Milvus)

        4.测试

        启动Spring Boot应用,访问http://127.0.0.1:8080/hello,查看控制台输出日志

        Connecting to DB: https://in03-258dd5ae260ce1b.serverless.gcp-us-west1.cloud.zilliz.com
        2024-09-25T21:29:30.636+08:00 ERROR 52861 --- [nio-8080-exec-2] i.m.client.AbstractMilvusGrpcClient : DescribeCollectionRequest collectionName:book failed, error code: 100, reason: can't find collection[database=db_258dd5ae260ce1b][collection=book]
        2024-09-25T21:29:30.641+08:00 ERROR 52861 --- [nio-8080-exec-2] i.m.client.AbstractMilvusGrpcClient : DescribeCollectionRequest collectionName:book failed! Exception:{}
        io.milvus.exception.ServerException: can't find collection[database=db_258dd5ae260ce1b][collection=book]
         at io.milvus.client.AbstractMilvusGrpcClient.handleResponse(AbstractMilvusGrpcClient.java:347) ~[milvus-sdk-java-2.3.4.jar:na]
         at io.milvus.client.AbstractMilvusGrpcClient.describeCollection(AbstractMilvusGrpcClient.java:655) ~[milvus-sdk-java-2.3.4.jar:na]
         at io.milvus.client.MilvusServiceClient.lambda$describeCollection$9(MilvusServiceClient.java:402) ~[milvus-sdk-java-2.3.4.jar:na]
         at io.milvus.client.MilvusServiceClient.retry(MilvusServiceClient.java:285) ~[milvus-sdk-java-2.3.4.jar:na]
         at io.milvus.client.MilvusServiceClient.describeCollection(MilvusServiceClient.java:402) ~[milvus-sdk-java-2.3.4.jar:na]
         at com.et.service.HelloZillizVectorDBService.search(HelloZillizVectorDBService.java:37) ~[classes/:na]
         at com.et.controller.HelloWorldController.showHelloWorld(HelloWorldController.java:18) ~[classes/:na]
         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
         at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
         at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:262) ~[spring-web-6.1.2.jar:6.1.2]
         at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.1.2.jar:6.1.2]
         at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.1.2.jar:6.1.2]
         at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:917) ~[spring-webmvc-6.1.2.jar:6.1.2]
         at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:829) ~[spring-webmvc-6.1.2.jar:6.1.2]
         at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.1.2.jar:6.1.2]
         at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) ~[spring-webmvc-6.1.2.jar:6.1.2]
         at org.springframework.web.servlet.DispatcherServlet.DOService(DispatcherServlet.java:979) ~[spring-webmvc-6.1.2.jar:6.1.2]
         at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.1.2.jar:6.1.2]
         at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.1.2.jar:6.1.2]
         at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.17.jar:6.0]
         at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.1.2.jar:6.1.2]
         at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.17.jar:6.0]
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.2.jar:6.1.2]
         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.2.jar:6.1.2]
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.2.jar:6.1.2]
         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.2.jar:6.1.2]
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.2.jar:6.1.2]
         at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.2.jar:6.1.2]
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.17.jar:10.1.17]
         at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
        Success!
        Creating example collection: book
        Schema: CreateCollectionParam(collectionName=book, shardsNum=2, description=my first collection, fieldTypes=[FieldType{name='book_id', type='Int64', elementType='None', primaryKey=true, partitionKey=false, autoID=false, params={}}, FieldType{name='word_count', type='Int64', elementType='None', primaryKey=false, partitionKey=false, autoID=false, params={}}, FieldType{name='book_intro', type='FloatVector', elementType='None', primaryKey=false, partitionKey=false, autoID=false, params={dim=64}}], partitionsNum=0, consistencyLevel=BOUNDED, databaseName=null, enableDynamicField=false)
        Success!
        Inserting 2000 entities... 
        Succeed in 1 seconds!
        Flushing...
        Succeed in 3.019 seconds!
        Building AutoIndex...
        Succeed in 3.092 seconds!
        Loading collection...
        Succeed in 1.915 seconds
        Searching vector: [[0.9944244, 0.693386, 0.23255765, 0.25712538, 0.8882742, 0.31521088, 0.10415316, 0.63687223, 0.23532659, 0.9057376, 0.23146588, 0.7598192, 0.18651527, 0.22246557, 0.71210265, 0.9853572, 0.7285811, 0.49920946, 0.5757665, 0.9907576, 0.6746712, 0.53398585, 0.3538667, 0.90167266, 0.09474373, 0.24573046, 0.19975495, 0.9486663, 0.38426965, 0.94270027, 0.0389961, 0.3591758, 0.092348695, 0.35975152, 0.0286901, 0.39673442, 0.59137595, 0.9894001, 0.7167906, 0.92300236, 0.95593584, 0.041143477, 0.26055408, 0.37320316, 0.64292294, 0.9690605, 0.8847745, 0.78260505, 0.92037845, 0.3789205, 0.13551015, 0.30201513, 0.49969083, 0.9982949, 0.066904426, 0.2057795, 0.58327323, 0.5174314, 0.14389539, 0.5790425, 0.9743603, 0.50154245, 0.6616634, 0.91518396]]
        Result: [type: Int64
        field_name: "book_id"
        Scalars {
         long_data {
         data: 1901
         data: 420
         }
        }
        field_id: 100
        , type: Int64
        field_name: "word_count"
        scalars {
         long_data {
         data: 11901
         data: 10420
         }
        }
        field_id: 101
        ]
        search 0 latency: 0.884 seconds
        Searching vector: [[0.012040913, 0.26888567, 0.8862797, 0.6432027, 0.72606975, 0.9214382, 0.8760127, 0.91277415, 0.6635162, 0.41956168, 0.21806747, 0.7068079, 0.562168, 0.28791857, 0.33324522, 0.83323824, 0.25118947, 0.8217658, 0.8863152, 0.5157847, 0.49335915, 0.39096528, 0.47110444, 0.9944315, 0.66889536, 0.98959273, 0.59788084, 0.7379387, 0.2901945, 0.6934935, 0.031101823, 0.93097365, 0.9596271, 0.32376093, 0.34571892, 0.8362285, 0.99687576, 0.7937399, 0.78078747, 0.34658694, 0.10428548, 0.2792738, 0.8640791, 0.57405174, 0.9725894, 0.20060968, 0.10779828, 0.101415455, 0.09755844, 0.7593852, 0.28356135, 0.6208364, 0.55110157, 0.42079234, 0.27782845, 0.06248188, 0.37675542, 0.7703235, 0.41342628, 0.07876682, 0.3361001, 0.8730568, 0.9582374, 0.38860106]]
        Result: [type: Int64
        field_name: "book_id"
        scalars {
         long_data {
         data: 118
         data: 776
         }
        }
        field_id: 100
        , type: Int64
        field_name: "word_count"
        scalars {
         long_data {
         data: 10118
         data: 10776
         }
        }
        field_id: 101
        ]
        search 1 latency: 0.193 seconds
        Searching vector: [[0.17430764, 0.9034548, 0.59125566, 0.13526762, 0.48277777, 0.9429901, 0.07483035, 0.09548402, 0.7757748, 0.5250427, 0.70900095, 0.46090156, 0.055408716, 0.5705429, 0.19141757, 0.5524303, 0.9825838, 0.6484894, 0.84965557, 0.41863292, 0.69617915, 0.123098195, 0.3800782, 0.8989199, 0.30235797, 0.33991778, 0.9502303, 0.6279421, 0.3922888, 0.94838214, 0.98462456, 0.23758143, 0.5195748, 0.16518217, 0.044407308, 0.9360681, 0.086349785, 0.9243839, 0.7705846, 0.85942554, 0.33542854, 0.6248715, 0.9321932, 0.3886962, 0.23936534, 0.5275571, 0.7020884, 0.68789816, 0.70815116, 0.7435949, 0.5740872, 0.36369282, 0.22608125, 0.42592448, 0.9893665, 0.59022135, 0.37368262, 0.9808166, 0.113725126, 0.63403445, 0.6192569, 0.3703097, 0.11013746, 0.19765383]]
        Result: [type: Int64
        field_name: "word_count"
        scalars {
         long_data {
         data: 11983
         data: 10315
         }
        }
        field_id: 101
        , type: Int64
        field_name: "book_id"
        scalars {
         long_data {
         data: 1983
         data: 315
         }
        }
        field_id: 100
        ]
        search 2 latency: 0.21 seconds
        Searching vector: [[0.78146076, 0.4127342, 0.19565648, 0.7598609, 0.0024149418, 0.20477176, 0.2239834, 0.40071744, 0.34123564, 0.69816893, 0.16385543, 0.8746263, 0.93988293, 0.14641893, 0.77087975, 0.74109954, 0.44419652, 0.686166, 0.8017639, 0.62660855, 0.12844962, 0.09513128, 0.0733701, 0.50885594, 0.19533062, 0.6489767, 0.5061082, 0.76457673, 0.556717, 0.62532073, 0.44644332, 0.47170228, 0.17381704, 0.031323075, 0.1744278, 0.61520636, 0.7062351, 0.48471195, 0.659993, 0.8125965, 0.8243918, 0.2953208, 0.6301986, 0.48987025, 0.44276655, 0.87922597, 0.59580773, 0.03247899, 0.2750023, 0.91016316, 0.109629214, 0.8797219, 0.26653385, 0.55840206, 0.5943634, 0.28695053, 0.4747029, 0.7866449, 0.19065481, 0.15052843, 0.017061412, 0.73239404, 0.29625612, 0.86883324]]
        Result: [type: Int64
        field_name: "word_count"
        scalars {
         long_data {
         data: 11674
         data: 11420
         }
        }
        field_id: 101
        , type: Int64
        field_name: "book_id"
        scalars {
         long_data {
         data: 1674
         data: 1420
         }
        }
        field_id: 100
        ]
        search 3 latency: 0.234 seconds
        Searching vector: [[0.5506256, 0.4888333, 0.55734605, 0.33249807, 0.9612315, 0.14942867, 0.74893725, 0.32297194, 0.19399291, 0.3686679, 0.16189837, 0.51538646, 0.4324317, 0.24171656, 0.17148066, 0.98530066, 0.70252293, 0.36399698, 0.67156136, 0.30545527, 0.8341777, 0.10815537, 0.04843366, 0.5751087, 0.030209243, 0.5765392, 0.56931233, 0.7783963, 0.87335634, 0.24376905, 0.15837216, 0.8376091, 0.8253407, 0.90347946, 0.91477525, 0.3711217, 0.34623754, 0.3486765, 0.7336032, 0.1333232, 0.9737603, 0.9348897, 0.56583005, 0.19536161, 0.66466415, 0.25348592, 0.1945247, 0.30146033, 0.6067432, 0.0488891, 0.61155295, 0.32729924, 0.58033705, 0.9833621, 0.805477, 0.0863865, 0.88150877,编程客栈 0.13743609, 0.8735751, 0.730011, 0.2418676, 0.24961507, 0.15848696, 0.90943843]]
        Result: [type: Int64
        field_name: "book_id"
        scalars {
         long_data {
         data: 632
         data: 71
         }
        }
        field_id: 100
        , type: Int64
        field_name: "wohttp://www.devze.comrd_count"
        scalars {
         long_data {
         data: 10632
         data: 10071
         }
        }
        field_id: 101
        ]
        search 4 latency: 0.246 seconds
        Searching vector: [[0.097262084, 0.67786944, 0.5956394, 0.599271, 0.80228144, 0.20551127, 0.60712826, 0.7927536, 0.8707964, 0.92879516, 0.8600838, 0.088315904, 0.28391147, 0.13210869, 0.6447914, 0.79745305, 0.1630668, 0.87363887, 0.8451723, 0.56345624, 0.30312908, 0.8302696, 0.7499766, 0.42542475, 0.9217818, 0.16116339, 0.76864123, 0.7699597, 0.55911744, 0.88660645, 0.4057927, 0.05212158, 0.9849399, 0.6994747, 0.25052422, 0.5464197, 0.6989017, 0.6539669, 0.8416681, 0.60720086, 0.67637247, 0.74851876, 0.87226254, 0.015863419, 0.2851053, 0.741167, 0.5423461, 0.4004978, 0.21673638, 0.32579643, 0.90930575, 0.5031407, 0.11341238, 0.042031705, 0.72256076, 0.20273715, 0.67203254, 0.49100053, 0.5708503, 0.78067535, 0.053472757, 0.8504045, 0.77535784, 0.43355346]]
        Result: [type: Int64
        field_name: "book_id"
        scalars {
         long_data {
         data: 1240
         data: 1074
         }
        }
        field_id: 100
        , type: Int64
        field_name: "word_count"
        scalars {
         long_data {
         data: 11240
         data: 11074
         }
        }
        field_id: 101
        ]
        search 5 latency: 0.233 seconds
        Searching vector: [[0.6666099, 0.60750645, 0.5930602, 0.62844944, 0.91999257, 0.40563875, 0.16784662, 0.58380336, 0.49874693, 0.9921237, 0.70105964, 0.109129846, 0.62001497, 0.29218578, 0.38023782, 0.80481774, 0.61428535, 0.45924222, 0.2801816, 0.40553528, 0.9678988, 0.4772452, 0.26234365, 0.934155, 0.6174237, 0.14148414, 0.5784021, 0.54518217, 0.11126441, 0.41204536, 0.61628705, 0.09558219, 0.12766111, 0.6261982, 0.899587, 0.8454346, 0.46918148, 0.5451731, 0.904986, 0.41042298, 0.82801545, 0.8856106, 0.5411191, 0.45282567, 0.448133, 0.8004736, 0.73305, 0.28807688, 0.99202037, 0.69817233, 0.67967457, 0.9214035, 0.97179586, 0.05739242, 0.15004623, 0.2254278, 0.6256416, 0.25962013, 0.015357256, 0.37749702, 0.037437856, 0.43823433, 0.88566333, 0.03802377]]
        Result: [type: Int64
        field_name: "book_id"
        scalars {
         long_data {
         data: 840
         data: 758
         }
        }
        field_id: 100
        , type: Int64
        field_name: "word_count"
        scalars {
         long_data {
         data: 10840
         data: 10758
         }
        }
        field_id: 101
        ]
        search 6 latency: 0.204 seconds
        Searching vector: [[0.11513382, 0.46449423, 0.74709874, 0.45208257, 0.09473729, 0.254663, 0.34211916, 0.9703239, 0.93299186, 0.9023329, 0.3711759, 0.8269761, 0.032090902, 0.7948698, 0.5412331, 0.18797356, 0.52153504, 0.9574906, 0.86989266, 0.9373586, 0.95098126, 0.74318993, 0.25189924, 0.7419808, 0.94729316, 0.5275025, 0.08891839, 0.100687325, 0.71073514, 0.915546, 0.20827055, 0.21283334, 0.29924893, 0.7821449, 0.4894712, 0.10083097, 0.43401027, 0.16695005, 0.6697829, 0.8920079, 0.09012061, 0.073818564, 0.005478561, 0.046307027, 0.77760696, 0.7813985, 0.57121813, 0.53898925, 0.112255454, 0.57960665, 0.43604386, 0.14278823, 0.79370797, 0.38984406, 0.16432655, 0.46382785, 0.29833382, 0.50633746, 0.6599931, 0.87258536, 0.6334079, 0.47853124, 0.3620978, 0.9284326]]
        Result: [type: Int64
        field_name: "word_count"
        scalars {
         long_data {
         data: 11609
         data: 10760
         }
        }
        field_id: 101
        , type: Int64
        field_name: "book_id"
        scalars {
         long_data {
         data: 1609
         data: 760
         }
        }
        field_id: 100
        ]
        search 7 latency: 0.201 seconds
        Searching vector: [[0.14196914, 0.72220755, 0.97196966, 0.95760065, 0.17740268, 0.84783286, 0.96259207, 0.6342059, 0.14442027, 0.49199748, 0.008492172, 0.397287, 0.9179648, 0.960828, 0.5513112, 0.36929417, 0.5710163, 0.5876399, 0.05758536, 0.8194362, 0.061840713, 0.98121184, 0.1594106, 0.72564113, 0.52452654, 0.42187476, 0.027037859, 0.3591584, 0.8754618, 0.4417299, 0.68962467, 0.16419351, 0.9725907, 0.0099541545, 0.98403805, 0.29020512, 0.7518712, 0.9071815, 0.71259576, 0.6060254, 0.90245855, 0.502836, 0.97288334, 0.67282623, 0.34302354, 0.7001372, 0.48336947, 0.15780938, 0.21866882, 0.7550309, 0.7676532, 0.35363984, 0.37162405, 0.74286896, 0.9311386, 0.5419771, 0.34793264, 0.8912447, 0.32318318, 0.75553536, 0.41343224, 0.8355903, 0.93488806, 0.29507792]]
        Result: [type: Int64
        field_name: "book_id"
        scalars {
         long_data {
         data: 443
         data: 1132
         }
        }
        field_id: 100
        , type: Int64
        field_name: "word_count"
        scalars {
         long_data {
         data: 10443
         data: 11132
         }
        }
        field_id: 101
        ]
        search 8 latency: 0.227 seconds
        Searching vector: [[0.77036685, 0.11818504, 0.9503699, 0.029416382, 0.02396065, 0.23895812, 0.41341382, 0.82225484, 0.8573582, 0.09137666, 0.6607858, 0.3046307, 0.07275897, 0.25788748, 0.6302589, 0.95142424, 0.46371943, 0.99155724, 0.7007737, 0.9712237, 0.043981254, 0.6340834, 0.6424302, 0.7176585, 0.6954333, 0.091201425, 0.026640236, 0.15468991, 0.36369103, 0.9462943, 0.0063298345, 0.72643405, 0.15416229, 0.9989488, 0.3602597, 0.8026867, 0.52236784, 0.8901442, 0.69515526, 0.59382325, 0.7458346, 0.95818526, 0.5083475, 0.09321368, 0.8753361, 0.26350176, 0.6790923, 0.6423713, 0.833, 0.5457574, 0.8288555, 0.1950497, 0.52434474, 0.7186958, 0.77294624, 0.24331266, 0.10928261, 0.8677729, 0.084388554, 0.7637791, 0.6102848, 0.8594893, 0.16542625, 0.9389486]]
        Result: [type: Int64
        field_name: "book_id"
        scalars {
         long_data {
         data: 1938
         data: 668
         }
        }
        field_id: 100
        , type: Int64
        field_name: "word_count"
        scalars {
         long_data {
         data: 11938
         data: 10668
         }
        }
        field_id: 101
        ]
        search 9 latency: 1.076 seconds

        5.引用

        The High-Performance Vector Database Built for Scale | MilvusMilvus | Open-source Vector Databse created by Zilliz

        到此这篇关于Spring Boot集成Milvus快速入门demo的文章就介绍到这了,更多相关Spring Boot集成Milvus内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

        0

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        关注公众号