部分文本用户搜索与排序 - 我该如何解决这个问题?

时间:2012-09-27 15:57:09

标签: facebook-fql

我正在尝试实现一种“公共人物”搜索形式,它采用部分字符串并返回可能公开的页面和用户。在页面方面,我按照喜欢的数量排序,在用户方面我按订阅者数量排序。页面工作正常。用户没有。

我的问题的关键是我不能在用户表上使用CONTAINS(),如下所示:

SELECT id, name from USER where CONTAINS("Jimmy F") ORDER BY subscriber_count DESC

我得到零结果。但是,如果我使用Profile表,它可以工作。从这里开始,我可以进行子查询,结果如下:

SELECT uid,name from USER WHERE uid in (SELECT id FROM profile where
CONTAINS("Jimmy F")) ORDER BY subscriber_count DESC

这里的问题是子查询没有排序。所以,这个例子,我希望看到Jimmy Fallon,他有63.3万用户。我没有,因为他没有包含在该配置文件子查询中。我可以增加该子查询的LIMIT,但它会减慢很多(LIMIT 200需要4秒才能回来,不包括Jimmy)。

所以我的广泛问题是:任何想法?我不知道在哪里可以获得更好的结果。

1 个答案:

答案 0 :(得分:0)

我认为你遇到的问题是由于Facebook的可见性限制。在文档的某处,Facebook解释说,当它执行任何查询时,它首先收集结果,然后筛选出可见的结果。

我使用此查询进行了一些测试:

SELECT uid, name, subscriber_count FROM user WHERE CONTAINS(_STRING_) 
  ORDER BY subscriber_count DESC

我尝试的值越具体,我收到的数据就越多:例如: “Jimmy Fallon”,“Paul Ryan”和“Michael Arrington”似乎都将合适的人归为第一个结果。 “Joe Biden”返回数据,但前10个回复(如'Mehmad Moha')并未在其名称中包含'Joe'或'Biden'的任何变体。

我为_STRING_尝试的其他值没有返回任何数据,包括“Jimmy F”,“Barack Obama”,“Mitt Romney”或“Mark Zuckerberg”。返回的结果必须是私密的,对我来说不可见。

我不确定CONTAINS实际搜索的内容。它似乎没有在任何地方记录。返回的人是否是朋友似乎没有任何关联。

似乎可以像CONTAINS('Jimmy F', name)一样向其添加字段,这会产生OAuth错误:'name' is not a valid search field for the user table。我在用户表中找不到任何不返回此错误的字段。

您可以尝试就此提交错误报告,但CONTAINS()似乎是不受支持的功能。