我如何使用 FQL 查询所有事件而不使用标记为 * 的可索引列

Posted

技术标签:

【中文标题】我如何使用 FQL 查询所有事件而不使用标记为 * 的可索引列【英文标题】:How could I use FQL to query all the events without using indexable column which is marked * 【发布时间】:2011-04-28 16:33:46 【问题描述】:

我有一个问题要解决。 我想查询所有的事件,我想找到具体的字符串。

FQL 代码如下:

SELECT eid, name, location, start_time, end_time FROM event WHERE strpos(lower(location),'test') >=0

当我使用这个 FQL 代码时,它总是出现错误。 错误消息是“您的语句不可索引。WHERE 子句必须包含可索引列。此类列在从 http://developers.facebook.com/docs/reference/fql 链接的表中标有 *”

请给我你的观点~谢谢:)

【问题讨论】:

【参考方案1】:

嗯,错误信息很清楚:

您的语句不可索引。这 WHERE 子句必须包含一个 可索引的列。这样的列是 在链接的表格中标有 * 从 http://developers.facebook.com/docs/reference/fql

所以你的方法根本行不通。

编辑: 为了进一步解释为什么这是不可能

Facebook 处理“超过 9 亿个对象,人们与之互动(页面、群组、活动和社区页面)”。 reference。

所以基本上让您(所有应用程序开发人员)能够搜索所有页面、事件、组...等肯定会导致系统崩溃。这就是为什么要仔细选择这些“可索引”字段的原因。

例如,如果您想按“位置”搜索事件,那么这些事件应该“以某种方式”与您的应用程序相关。例如,就像由您的应用程序创建的一样,您应该将它们的 id 存储在某个地方,以便这样的事情可以工作:

SELECT eid, name, location, start_time, end_time FROM event WHERE
strpos(lower(location),'test') >=0 AND eid IN (ids_from_your_db)

【讨论】:

是的~我知道,如果我想找到一些包含特定字符串并且索引uid不稳定的事件。我想找到解决这个问题的方法。

以上是关于我如何使用 FQL 查询所有事件而不使用标记为 * 的可索引列的主要内容,如果未能解决你的问题,请参考以下文章

如何使用图形 api/FQL 从 facebook 获取过去/结束的公共事件?

检索由具有 FQL 的组主持的事件

FQL 查询未返回所有数据

FQL 事件 pic_cover 返回 null

无法检索页面创建的事件

如何在不使用 fql 的情况下获取帖子 URL 的 Facebook 点赞、分享和评论计数?