milvus 根据字段值查询java withExpr
您可以使用以下代码来根据字段值查询 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 对象
原文地址: https://www.cveoy.top/t/topic/fsFp 著作权归作者所有。请勿转载和采集!