1

假设我有一个电影数据库,其中包含一些类型的标签。我的 Weaviate 架构如下所示:

"classes": [{
  "class": "Movie",
  "properties": [{
    "name": "name",
    "dataType": ["string"],
  }, {
    "name": "inGenres",
    "dataType": ["Genre"],
  }],
}, {
  "class": "Genre",
  "properties": [{
    "name": "name",
    "dataType": ["string"],
  }],
}]

我想从搜索结果中排除带有特定类型标签的电影。具体来说,对于包含以下Movie对象的数据库:

{"name":"foo", "inGenres":[{"name":"drama"}]}
{"name":"bar", "inGenres":[{"name":"horror"},{"name":"thriller"}]}
{"name":"baz", "inGenres":[{"name":"horror"},{"name":"sci-fi"}]}

如果我排除horror流派,搜索结果应该只返回电影foo。有没有办法使用 GraphQL 或 Python 客户端执行这样的查询?

4

1 回答 1

0

您可以使用where过滤器来实现此目的。

在您的具体情况下:

{
  Get {
    Article(
      where: {
        path: ["inGenres", "Genre", "name"],
        operator: NotEqual,
        valueString: "horror" 
      }
    ) {
      name
      inGenres {
        ... on Genre {
          name
        }
      }
    }
  }
}

在 Python 中

import weaviate

client = weaviate.Client("http://localhost:8080")

where_filter = {
  "path": ["inGenres", "Genre", "name"],
  "operator": "NotEqual",
  "valueString": "horror" 
}

query_result = client.query.get("Movie", ["name"]).with_where(where_filter).do()

print(query_result)
于 2022-01-19T23:54:30.240 回答