0

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

我的问题的症结在于我不能在用户表上使用 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

这里的问题是子查询没有排序。所以,在这个例子中,我希望看到拥有 633k 订阅者的Jimmy Fallon 。我没有,因为他不包含在该配置文件子查询中。我可以增加该子查询的 LIMIT,但它会减慢很多(LIMIT 200 需要 4 秒才能返回,并且仍然不包括 Jimmy)。

所以我在这里的广泛问题是:有什么想法吗?我不知道在哪里可以得到更好的结果,在这里。

4

1 回答 1

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()似乎是不受支持的功能。

于 2012-09-27T20:50:13.977 回答