最近在Facebook.SO上使用CONTAINS()
子句中的WHERE
several questions posted。它似乎像Graph API搜索功能一样工作,AND作为索引字段。 FQL开发人员的所有精彩内容。
SELECT name,
username,
type
FROM profile
WHERE CONTAINS("Facebook")
但是,CONTAINS
功能中唯一官方提及的Contains
功能会出现在unified_thread文档中。它在传递中被提及,作为搜索消息中包含的文本的一种方式。它也出现在fbrell code sample。
但是SELECT name
FROM user
WHERE CONTAINS("Joe Biden")
似乎不是一个简单的搜索。例如,此查询:
CONTAINS
返回“Joe Biden”以及“Joseph Biden”和“Biden Joe”。但它也回归“Joe Scardino”,“Lindsay Noyan”和“Mehmad Moha”等。这些人与美国副总统有什么关系?他们不是我的朋友,所以我永远不会知道。
似乎还能够将 (#615) 'name' is not a valid search field for the profile table.
字段传递给搜索,但是将第一个查询的结尾更改为“CONTAINS(”Facebook“,name)会返回OAuth错误:
{{1}}
在我不那么严格的测试中,我还没有找到一个不会返回此错误的字段/表组合。
那么这个神秘功能是什么?它是如何工作的?是否允许我们在FQL中做到迄今为止无法做到的事情,如遍历数组和过滤存储在字符串中的数据?
这里的答案很棒,但有关FQL功能的说明&官方开发者文档站点上的方法参考页面会更好。
答案 0 :(得分:2)
我不认为这里有任何重要的答案,但我可以针对返回无关名称的问题给出一个解决方法 - 我怀疑这是因为人们公开发布关于Joe Biden的帖子,喜欢他,或者等等。如果您执行以下操作:
SELECT name
FROM user
WHERE CONTAINS("Joe Biden")
AND strpos(lower(name),lower("Joe Biden")) >=0
你将获得一个只包含正确名称的结果集 - 虽然它消除了返回Joseph Biden等的优势等。
我个人的痛苦之处在于,CONTAINS()似乎与配置文件表上的部分字符串(例如“Joe Bide”)一起使用,但不在用户表上。非常令人沮丧。