您可以使用以下代码来根据字段值查询 milvus:

import io.milvus.client.*;
import java.util.*;

public class MilvusJavaDemo {
    public static void main(String[] args) throws InterruptedException {
        String host = "localhost";
        int port = 19530;
        ConnectParam connectParam = new ConnectParam.Builder().withHost(host).withPort(port).build();
        MilvusClient client = new MilvusGrpcClient(connectParam);

        String collectionName = "test_collection";
        int dimension = 128;
        CollectionMapping collectionMapping = new CollectionMapping.Builder(collectionName, dimension).build();
        client.createCollection(collectionMapping);

        List<Float> vector = Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f);
        List<Long> ids = Arrays.asList(1L, 2L, 3L, 4L);
        InsertParam insertParam = new InsertParam.Builder(collectionName).withFloatVectors(Arrays.asList(vector)).withIds(ids).build();
        client.insert(insertParam);

        SearchParam searchParam = new SearchParam.Builder(collectionName).withFloatVectors(Arrays.asList(vector)).withTopK(10).build();
        List<String> partitionNames = new ArrayList<>();
        SearchResult searchResult = client.search(searchParam, partitionNames);

        List<Long> searchIds = searchResult.getResultIds().get(0);
        System.out.println("Ids: " + searchIds);
        List<Float> searchDistances = searchResult.getResultDistances().get(0);
        System.out.println("Distances: " + searchDistances);

        // 查询第一个向量的值大于0.2的向量
        Expr left = Expr.createFloat64Expr("vector[0]", BinaryExpr.Operator.GT, new Double(0.2));
        SearchParam searchParamWithExpr = new SearchParam.Builder(collectionName).withFloatVectors(Arrays.asList(vector)).withTopK(10).withExpr(left).build();
        SearchResult searchResultWithExpr = client.search(searchParamWithExpr, partitionNames);

        List<Long> searchIdsWithExpr = searchResultWithExpr.getResultIds().get(0);
        System.out.println("Ids with expr: " + searchIdsWithExpr);
        List<Float> searchDistancesWithExpr = searchResultWithExpr.getResultDistances().get(0);
        System.out.println("Distances with expr: " + searchDistancesWithExpr);

        client.dropCollection(collectionName);
        client.close();
    }
}

在上面的代码中,我们首先创建了一个名为 test_collection 的集合,并向其中插入了四个向量。接着,我们使用 SearchParam 对象执行一次简单的搜索,并打印出结果。这时,我们查询的是整个集合中与第一个向量最相似的向量。

接下来,我们使用 Expr 对象创建了一个查询条件,即查询第一个向量的值大于 0.2 的向量。我们将该条件传递给 SearchParam 对象,并再次执行搜索。这时,搜索结果应该只包含符合条件的向量。

注意,在使用 Expr 创建查询条件时,需要指定字段名称、运算符和值。在本例中,我们使用的是 createFloat64Expr 方法,因为我们的向量中包含的是浮点数。如果您的向量包含整数或字符串等类型的值,则需要使用相应的方法创建 Expr 对象。

另外,需要注意的是,Milvus 目前只支持单个条件的查询。如果您需要执行多个条件的查询,则需要将多个条件组合成一个复合条件,然后再传递给 SearchParam 对象

milvus 根据字段值查询java withExpr

原文地址: https://www.cveoy.top/t/topic/fsFp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录