You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Weaviate Java客户端如何获取对象ID以实现对象更新?

在Weaviate Java客户端中获取对象ID的方法

要通过nearText或where过滤器定位对象后获取ID(用于后续更新操作),只需在查询时指定返回附加的ID字段,再从查询结果中提取即可,具体步骤如下:

1. 查询时指定返回ID

在构建数据查询时,调用withAdditional("id")方法,告知Weaviate需要返回对象的ID。这个方法适用于nearText查询和where过滤查询两种场景。

示例1:nearText查询获取ID

import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.data.model.WeaviateObject;
import io.weaviate.client.v1.data.query.QueryBuilder;
import java.util.List;

public class NearTextGetId {
    public static void main(String[] args) {
        WeaviateClient client = new WeaviateClient("http://localhost:8080");

        // 执行nearText查询并请求返回ID
        Result<List<WeaviateObject>> queryResult = client.data().get()
                .withClassName("YourClass") // 替换为你的数据类名称
                .withNearText(QueryBuilder.nearTextBuilder()
                        .concepts(new String[]{"搜索关键词"})) // 替换为你的搜索概念
                .withAdditional("id") // 关键:要求返回对象ID
                .run();

        if (queryResult.isSuccess()) {
            for (WeaviateObject obj : queryResult.getResult()) {
                String objectId = obj.getId(); // 提取对象ID
                System.out.println("找到的对象ID:" + objectId);
                // 后续可使用此ID执行更新操作
            }
        } else {
            System.err.println("查询失败:" + queryResult.getError());
        }
    }
}

示例2:where过滤查询获取ID

import io.weaviate.client.WeaviateClient;
import io.weaviate.client.base.Result;
import io.weaviate.client.v1.data.model.WeaviateObject;
import io.weaviate.client.v1.data.query.QueryBuilder;
import io.weaviate.client.v1.data.query.operator.Operator;
import java.util.List;

public class WhereFilterGetId {
    public static void main(String[] args) {
        WeaviateClient client = new WeaviateClient("http://localhost:8080");

        // 执行where过滤查询并请求返回ID
        Result<List<WeaviateObject>> queryResult = client.data().get()
                .withClassName("YourClass")
                .withWhere(QueryBuilder.whereBuilder()
                        .path(new String[]{"属性名称"}) // 替换为过滤的属性名
                        .operator(Operator.EQUAL)
                        .valueString("目标值")) // 替换为过滤的目标值
                .withAdditional("id")
                .run();

        if (queryResult.isSuccess()) {
            for (WeaviateObject obj : queryResult.getResult()) {
                String objectId = obj.getId();
                System.out.println("找到的对象ID:" + objectId);
            }
        } else {
            System.err.println("查询失败:" + queryResult.getError());
        }
    }
}

2. 提取ID并执行更新

拿到ID后,即可使用Weaviate Java客户端的更新接口,通过ID定位对象并更新:

// 示例更新操作
client.data().update()
        .withId(objectId)
        .withClassName("YourClass")
        .withProperties("{\"属性名\": \"新值\"}") // 替换为要更新的属性和值
        .run();

内容的提问来源于stack exchange,提问作者Chethana Wickramaarachchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:15:15