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

Weaviate关联属性聚合查询问题:按专利类别统计符合nearVector条件的专利数量

解决Weaviate中跨类关联的聚合分组统计问题

你的需求是按Patent的category分组,统计关联的Paragraphs满足向量匹配条件的唯一Patent数量,之前的查询有两个核心问题:一是聚合的起点选错了(应该从Patent而非Paragraph出发),二是分组时的关联属性写法不符合Weaviate的语法规范。下面是具体的解决方案:

正确的查询思路

我们需要先过滤出所有关联了至少一个符合nearVector条件的Paragraphs的Patents,再按category分组统计这些Patents的数量(天然去重,因为每个Patent只会被计数一次,无论它有多少个匹配的Paragraphs)。

完整的Python查询代码

首先确认你的类关联关系:假设Paragraphs类有一个名为inPatent的属性,用来引用关联的Patent;对应的,Patent类可以通过反向引用路径~inPatent来关联到它的Paragraphs(如果Patent类有正向关联属性比如paragraphs,直接用这个属性名即可)。

# 替换成你的目标向量
target_vector = [0.1, 0.2, ...]

result = (
    client.query.aggregate("Patent")
    # 过滤条件:关联的Paragraphs满足nearVector匹配
    .with_where({
        "operator": "Exists",
        "nested": {
            # 这里的路径根据你的类关联调整:
            # 如果Patent有正向关联Paragraphs的属性(比如叫paragraphs),用["paragraphs"]
            # 如果是反向引用(Paragraphs的inPatent指向Patent),用["~inPatent"]
            "path": ["~inPatent"],
            "operator": "NearVector",
            "valueVector": target_vector,
            "certainty": 0.9
        }
    })
    # 按Patent的category属性分组
    .with_group_by_filter(["category"])
    # 获取分组的category值和对应的Patent数量
    .with_fields('groupedBy { value }')
    .with_fields('meta { count }')
    .do()
)

代码解释

  1. 聚合起点选Patent类:我们要统计的是Patent的数量,所以直接对Patent类做聚合,避免了同一个Patent因多个匹配Paragraph被重复计数的问题。
  2. 嵌套过滤关联的Paragraphs:用Exists运算符结合nested过滤,确保只保留那些关联了符合向量匹配条件的Paragraphs的Patents。
  3. 按category分组:直接指定category作为分组字段,符合Weaviate的语法要求(之前的错误就是用了GraphQL内联片段的写法,不符合group_by_filter的路径规范)。

结果示例

成功执行后,返回的结果结构大致如下,每个分组包含对应的category值和该组的Patent数量:

{
  "data": {
    "Aggregate": {
      "Patent": [
        {
          "groupedBy": { "value": "Electronics" },
          "meta": { "count": 8 }
        },
        {
          "groupedBy": { "value": "Biotechnology" },
          "meta": { "count": 5 }
        }
      ]
    }
  }
}

之前错误的原因

  • 你之前从Paragraph类聚合,会导致同一个Patent被多次统计(如果它有多个匹配的Paragraphs),无法实现去重。
  • group_by_filter的参数需要是直接的属性路径,不能使用inPatent{... on Patent{publicationID}}这种GraphQL内联片段的写法,这也是报错的直接原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:12:35