当我从流表中提取搜索结果时,返回的组件之一是注释数组。我想知道是否有任何方法可以根据评论数组中的评论文本进行搜索?
这是我的疑问。它以目前的形式运行良好:
SELECT post_id,归因,消息,描述,评论。评论列表。text,点赞,位置,永久链接,消息标签,消息,描述标签,类型FROM流中的WHERE filter_key(SELECT filter_key FROM stream_filter WHERE uid=me())以及((strpos(下(消息),"大学橄榄球")>=0)OR(strpos(lower(description),"大学橄榄球")>=0)OR(strpos(下(归因),"大学橄榄球")>=0))order by created_time desc
其中一个返回行的comment_list.text结果如下所示:
"评论":{"注释列表":[{"text":"我喜欢大学橄榄球"},{"text":"阿拉巴马州和路易斯安那州立大学统治大学橄榄球"}]}
我的问题是:我是否也可以像搜索上面的消息、描述和归因一样,在评论.评论列表.文本中进行搜索?当我尝试添加以下内容时:
(strpos(lower(comments.comment_list.text),"大学橄榄球")>=0)
我得到了一个空的数据集(有趣的是,我没有得到任何错误,只是得到了空的结果)。我明白为什么了,因为我需要能够以某种方式遍历评论数组,然后检索它们的文本,并对评论的文本进行比较。我想在Facebook端用FQL来做这件事,并希望避免检索所有结果,然后在我端迭代它们。关于如何做到这一点,有什么想法或建议吗?
提前感谢您的帮助!
stream
表中的comments
字段仅检索注释的子集。我认为上限是5。而且搜索FQL返回的数组似乎很容易。事实并非如此。
最好的做法是将其转换为多查询。对于结果,您只需要查看#combined
数据。
{'all_posts':
'SELECT post_id FROM stream WHERE filter_key in
(SELECT filter_key FROM stream_filter WHERE uid=me())',
'commented':
'SELECT post_id FROM comment WHERE post_id IN (SELECT post_id FROM #all_posts)
AND (strpos(lower(text), 'college football') >= 0',
'combined':
'SELECT post_id, attribution, message, description, comments.comment_list.text, likes,
place, permalink, message_tags, message, description_tags, type
FROM stream WHERE post_id IN (SELECT post_id FROM #all_posts) AND
(
(strpos(lower(message), 'college football') >= 0) OR
(strpos(lower(description), 'college football') >= 0) OR
(strpos(lower(attribution), 'college football') >= 0)
)
OR post_id IN (SELECT post_id FROM #commented)
order by created_time desc'
}