java milvus 的使用示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java milvus 的使用示例
Java Milvus是一个开源的向量相似度搜索引擎,它提供了高效的向量索引和搜索功能。
在本文中,我们将介绍Java Milvus的使用示例,包括如何构建索引、如何进行向量搜索以及如何评估搜索结果的准确性。
我们需要在Java项目中引入Milvus的依赖项。
可以通过Maven 或Gradle将Milvus的Java SDK添加到项目中。
然后,我们需要连接到Milvus服务器。
可以通过以下代码创建MilvusClient实例并连接到服务器:
```java
import vus.client.*;
import java.util.Collections;
public class MilvusExample {
public static void main(String[] args) {
String host = "localhost"; // Milvus服务器的主机名或IP地址
int port = 19530; // Milvus服务器的端口号
ConnectParam connectParam = new ConnectParam.Builder()
.withHost(host)
.withPort(port)
.build();
MilvusClient client = new MilvusGrpcClient(connectParam);
client.connect(); // 连接到Milvus服务器
// 其他操作
client.disconnect(); // 断开与Milvus服务器的连接
}
}
```
在连接成功后,我们可以进行向量索引的构建。
首先,我们需要定义一个Collection(集合),表示待索引的向量集合。
可以通过以下代码创建一个新的Collection:
```java
String collectionName = "example_collection";
int dimension = 128; // 向量的维度
Index index = new Index.Builder()
.withIndexType(IndexType.IVF_SQ8)
.withParams(Collections.singletonMap("nlist", 16384))
.build(); // 构建索引
CollectionMapping collectionMapping = new
CollectionMapping.Builder(collectionName, dimension)
.withIndex(index)
.build(); // 创建CollectionMapping对象CreateCollectionParam createCollectionParam = new CreateCollectionParam.Builder()
.withCollectionMapping(collectionMapping)
.build(); // 创建CreateCollectionParam对象
client.createCollection(createCollectionParam); // 创建Collection
```
在Collection创建成功后,我们可以将向量数据插入到Collection 中。
可以通过以下代码将向量数据插入到Collection中:
```java
String fieldName = "embedding";
List<FloatVector> vectors = new ArrayList<>(); // 待插入的向量集合
for (int i = 0; i < 1000; i++) {
float[] data = new float[dimension];
// 生成随机向量数据
for (int j = 0; j < dimension; j++) {
data[j] = (float) Math.random();
}
vectors.add(new FloatVector(data));
}
InsertParam insertParam = new InsertParam.Builder(collectionName)
.withFloatVectors(fieldName, vectors)
.build(); // 创建InsertParam对象
client.insert(insertParam); // 插入向量数据
```
向量数据插入成功后,我们可以进行向量搜索。
可以通过以下代码进行向量搜索:
```java
List<FloatVector> queryVectors = new ArrayList<>(); // 待搜索的向量集合
float[] queryData = new float[dimension];
// 生成随机查询向量数据
for (int i = 0; i < dimension; i++) {
queryData[i] = (float) Math.random();
}
queryVectors.add(new FloatVector(queryData));
String fieldName = "embedding";
SearchParam searchParam = new SearchParam.Builder(collectionName)
.withFloatVectors(fieldName, queryVectors)
.withTopK(10) // 搜索结果的数量
.build(); // 创建SearchParam对象
SearchResponse searchResponse = client.search(searchParam); // 进行向量搜索
```
搜索结果将保存在SearchResponse对象中,我们可以通过以下代码获取搜索结果:
```java
if (searchResponse.ok()) {
List<SearchResponse.QueryResult> queryResults = searchResponse.getQueryResults();
for (SearchResponse.QueryResult queryResult : queryResults) {
List<Long> ids = queryResult.getIds(); // 检索到的向量的ID
List<Float> distances = queryResult.getDistances(); // 检索到的向量与查询向量的距离
// 处理搜索结果
}
}
```
除了向量搜索,我们还可以对搜索结果进行评估。
可以通过以下代码计算搜索结果的准确率和召回率:
```java
List<Long> groundTruthIds = new ArrayList<>(); // 真实的相似向量的ID
// 添加真实的相似向量的ID
EvaluationResponse evaluationResponse = client.evaluate(collectionName, groundTruthIds);
if (evaluationResponse.ok()) {
float precision = evaluationResponse.getPrecision(); // 准确率
float recall = evaluationResponse.getRecall(); // 召回率
// 输出评估结果
}
```
到此为止,我们已经介绍了Java Milvus的使用示例,包括连接到Milvus服务器、构建索引、插入向量数据、进行向量搜索以及评估
搜索结果的准确性。
希望本文能够帮助读者理解和使用Java Milvus。