因为无法使用 MQL 获取随机记录,所以我尝试首先使用计数来获取它:
[{ "return": "count", "id": null, "name": null, "type": "/people/person"}]
并使用0
和每页总记录数
之间的随机页码n
。在此示例中,大约有 2,000,000 条记录(40,000 页,每页 50 条记录)。
然后我发送一个带有“page”属性的信封,并且我还将查询限制为获取第 n 页中的 50 条记录:
[{ "limit": 50, "id": null, "name": null, "type": "/people/person"}]
在信封中:
{"page": n}
但是,当 n > 50
时,此查询非常慢。当 n > 100
时,速度慢得可怕,并且(例如)当 n > 2000
时,它甚至不返回。
我可以做些什么来获得随机记录吗?我错过了什么吗?
最佳答案
当您执行此操作时,数据库必须获取所有较早的记录,以便它可以计数到您想要的记录。这就是为什么它这么慢。您可以执行以下几项不同的操作:
- 使用 Freebase 数据转储,可以为随机人员生成 Freebase MID 列表,然后通过 MQL 进行查询,也可以为整个任务生成 Freebase MID 列表(您无需说明要获取哪些信息)
- 以更容易计算的不同形式呈现随机化问题。例如,您可以首先为主题选择一个随机创建时间范围(1997 年至今),然后选择在该时间范围内创建的随机人物主题。
关于获取随机记录时 Freebase MQL 查询非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11508467/