最近有several questions posted在 Facebook.SO 上,在 WHERE
子句中使用 CONTAINS()
。它的工作原理似乎类似于 Graph API 搜索功能,并且充当索引字段。对于 FQL 开发人员来说,这一切都是伟大的事情。
SELECT name,
username,
type
FROM profile
WHERE CONTAINS("Facebook")
但是,官方唯一提及 CONTAINS
函数出现在 unified_thread 中。文档。顺便提到它是一种搜索消息中包含的文本的方法。也出现在这个fbrell code sample .
但是Contains
似乎并不是一个简单的搜索。例如,这个查询:
SELECT name
FROM user
WHERE CONTAINS("Joe Biden")
返回“乔·拜登”以及“约瑟夫·拜登”和“拜登·乔”。但它也返回了“Joe Scardino”、“Lindsay Noyan”和“Mehmad Moha”等。这些人与美国副总统是什么关系?他们不是我的 friend ,所以我永远不会知道。
似乎还可以传递 CONTAINS
字段进行搜索,但是将我的第一个查询的结尾更改为 `CONTAINS("Facebook", name) 会返回 OAuth 错误:
(#615) 'name' is not a valid search field for the profile table.
在我不太严格的测试中,我还没有找到不会返回此错误的字段/表组合。
那么这个神秘的功能是什么呢?它是如何工作的?它能让我们做迄今为止在 FQL 中不可能完成的事情,比如遍历数组和过滤存储在字符串中的数据吗?
这里的答案很好,但官方开发人员文档网站上的 FQL 函数和方法引用页面上的描述会更好。
最佳答案
我认为 a 在这里没有任何好的答案,但我可以为返回不相关名称的问题提供一个解决方法 - 我怀疑这是因为人们公开发布了有关乔·拜登的帖子,喜欢他,等等。如果您执行以下操作:
SELECT name
FROM user
WHERE CONTAINS("Joe Biden")
AND strpos(lower(name),lower("Joe Biden")) >=0
您将得到一个仅包含正确名称的结果集 - 尽管它消除了返回约瑟夫·拜登等的优势。
我个人的痛点是 CONTAINS() 似乎适用于配置文件表上的部分字符串(例如“Joe Bide”),但不适用于用户表。非常令人沮丧。
关于facebook-fql - FQL 中 CONTAINS() 的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12630401/