2

最近在 Facebook.SO 上发布了几个 问题 ,使用该子句。它似乎像 Graph API 搜索功能一样工作,AND 用作索引字段。对于 FQL 开发人员来说,一切都很棒。CONTAINS()WHERE

SELECT name,
       username,
       type
FROM   profile
WHERE  CONTAINS("Facebook")

但是,该CONTAINS函数的唯一官方提及出现在Unified_thread文档中。顺便提到了它,作为搜索消息中包含的文本的一种方式。它也出现在这个fbrell 代码示例中

Contains似乎不是一个简单的搜索。例如,这个查询:

SELECT name
FROM   user
WHERE  CONTAINS("Joe Biden")

返回“Joe Biden”以及“Joseph Biden”和“Biden Joe”。但它也返回“Joe Scardino”、“Lindsay Noyan”和“Mehmad Moha”等。这些人与美国副总裁有什么关系?他们不是我的朋友,所以我永远不会知道。

似乎还可以传递CONTAINS一个字段进行搜索,但是将我的第一个查询的结尾更改为 `CONTAINS("Facebook", name) 会返回一个 OAuth 错误:

 (#615) 'name' is not a valid search field for the profile table.

在我不那么严格的测试中,我还没有找到不返回此错误的字段/表格组合。

那么这个神秘功能是什么?它是如何工作的?它可以让我们做迄今为止在 FQL 中不可能完成的事情,比如遍历数组和过滤存储在字符串中的数据吗?

这里的答案会很好,但是在官方开发人员文档站点上的 FQL 函数和方法参考页面上的描述会更好。

4

1 回答 1

2

我认为这里没有什么好的答案,但我可以为返回不相关姓名的问题提供一种解决方法——我怀疑这是因为人们公开发布了关于乔·拜登的帖子,喜欢他等等。如果您执行以下操作:

SELECT name
FROM   user
WHERE  CONTAINS("Joe Biden")
AND    strpos(lower(name),lower("Joe Biden")) >=0

您将得到一个只包含正确名称的结果集——尽管它消除了返回 Joseph Biden 等的优势。

我个人的痛点是 CONTAINS() 似乎适用于配置文件表上的部分字符串(例如“Joe Bide”),但不适用于用户表。非常令人沮丧。

于 2012-09-27T21:48:38.543 回答