Freebase query - exclusion of certain values

2019-06-22 07:37发布

I want to retrieve name of all movies and their genre. It's ok if information about genre is empty, but if genre is known I want to retrieve it.

"/film/film/genre": [{"id":null,"optional":"optional"}]

But I'm not interested in gay pornography, so I want to exclude all movies with genre "/en/gay_pornography".

"/film/film/genre": [{"id|=":["/en/gay_pornography"],"optional":"forbidden"}]

The problem is, how to combine it in one query? I.e. how to get all movies, even those with no genre and exclude pr0n?

Edit: it's required to exclude multiple genres, e.g. also /en/pornographic_movie

标签: freebase
2条回答
爷、活的狠高调
2楼-- · 2019-06-22 08:21

You're basically there: you just need two "genre" clauses. MQL lets you do this by allowing arbitrary prefixes on any clause:

[{
  "id":   null,
  "type": "/film/film",
  "genre": [{
    "id":       null,
    "optional": true
  }],
  "forbid:genre": {
    "id|=": [
      "/en/gay_pornography",
      "/en/pornographic_movie"
    ],
    "optional": "forbidden"
  }
}]​

http://tinyurl.com/4449ufg

查看更多
forever°为你锁心
3楼-- · 2019-06-22 08:27

Use the "but not" operator:

 "genre": [{
    "id":       null,
    "id!=":     "/en/gay_pornography",
    "optional": true
  }]

Full example: http://tinyurl.com/3tjdb4j

Edit: This doesn't answer the question. It just prevents that particular id from being listed as a genre of the film but doesn't forbid the film. @phillip-kendal's answer is correct.

查看更多
登录 后发表回答