我正在尝试实现一种“公共人物”搜索形式,它采用部分字符串并返回可能公开的页面和用户。在页面方面,我按照喜欢的数量排序,在用户方面我按订阅者数量排序。页面工作正常。用户没有。
我的问题的关键是我不能在用户表上使用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)。
所以我的广泛问题是:任何想法?我不知道在哪里可以获得更好的结果。
答案 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()
似乎是不受支持的功能。