2

最近、句で使用して Facebook.SOに投稿されたいくつかの 質問があります。 Graph API の検索機能のように動作するようで、AND はインデックス付きフィールドとして機能します。FQL 開発者にとってすべてが素晴らしいことです。CONTAINS()WHERE

SELECT name,
       username,
       type
FROM   profile
WHERE  CONTAINS("Facebook")

ただし、CONTAINS関数に関する唯一の公式の言及は、unified_threadのドキュメントに記載されています。メッセージに含まれるテキストを検索する方法として、ついでに言及されています。このfbrell コード サンプルにも表示されます。

しかしContains、単純な検索ではないようです。たとえば、次のクエリです。

SELECT name
FROM   user
WHERE  CONTAINS("Joe Biden")

"Joe Biden" と "Joseph Biden" および "Biden Joe" を返します。ただし、「Joe Scardino」、「Lindsay Noyan」、「Mehmad Moha」なども返されます。これらの人々は、米国の副大統領とどのような関係を持っていますか? 彼らは私の友達ではないので、私にはわかりません。

CONTAINS検索するフィールドを渡す機能もあるようですが、最初のクエリの末尾を `CONTAINS("Facebook", name) に変更すると、OAuth エラーが返されます。

 (#615) 'name' is not a valid search field for the profile table.

それほど厳密ではない私のテストでは、このエラーを返さないフィールド/テーブルの組み合わせをまだ見つけていません。

では、この謎の機能とは何でしょう?それはどのように機能しますか?配列のトラバースや文字列に格納されたデータのフィルタリングなど、これまで FQL では不可能だったことが可能になるでしょうか?

ここでの回答は素晴らしいですが、公式の開発者向けドキュメント サイトの FQL 関数とメソッドのリファレンス ページでの説明はさらに良いでしょう。

4

1 に答える 1

2

ここで良い答えはないと思いますが、無関係な名前を返す問題の回避策を提供できます。これは、人々がJoe Bidenについて公開投稿したり、彼を気に入ったりしたためだと思います。次の場合:

SELECT name
FROM   user
WHERE  CONTAINS("Joe Biden")
AND    strpos(lower(name),lower("Joe Biden")) >=0

正しい名前のみを含む結果セットが得られますが、JosephBidenなどを返すという利点はありません。

私の個人的な悩みの種は、CONTAINS()がプロファイルテーブルの部分的な文字列(「JoeBide」など)では機能するように見えるが、ユーザーテーブルでは機能しないことです。とてもイライラします。

于 2012-09-27T21:48:38.543 に答える