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

ここでの問題は、サブクエリがソートされていないことです。したがって、この例では、 63 万 3,000 人のサブスクライバーを持つJimmy Fallonが表示されると予想されます。彼はそのプロファイルサブクエリに含まれていないため、私はしません。そのサブクエリの LIMIT を増やすことはできますが、大幅に遅くなります (LIMIT 200 が返されるまでに 4 秒かかりましたが、まだジミーは含まれていませんでした)。

ここでの私の一般的な質問は次のとおりです。何かアイデアはありますか?より良い結果を得るには、どこに頼ればよいかわかりません。

4

1 に答える 1

0

あなたが抱えている問題は、Facebook の可視性の制約によるものだと思います。ドキュメントのどこかで、Facebook は、クエリを実行すると、最初に結果を収集し、次に表示される結果を除外すると説明しています。

このクエリでいくつかのテストを行いました:

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

試した値が具体的であるほど、より多くのデータを受け取りました。たとえば、「ジミー ファロン」、「ポール ライアン」、「マイケル アーリントン」はすべて、最初の結果として適切な人物を返すようです。「Joe Biden」はデータを返しましたが、最初の 10 件の応答 (「Mehmad Moha」など) には、名前に「Joe」または「Biden」のバリエーションが含まれていませんでした。

"Jimmy F"、"Barack Obama"、"Mitt Romney"、"Mark Zuckerberg" など、私が試した他の値で_STRING_はデータが返されませんでした。返される結果は非公開で、私には見えないようにする必要があります。

CONTAINS実際に何を検索しているのかわかりません。どこにも文書化されていないようです。戻ってきた人が友達かどうかに相関関係はないようです。

のようにフィールドを追加する機能があるようですCONTAINS('Jimmy F', name)が、OAuth エラーが発生します: 'name' is not a valid search field for the user table。このエラーを返さないユーザー テーブルのフィールドが見つかりません。

これについてバグ レポートを提出することもできますCONTAINS()が、サポートされていない機能のようです。

于 2012-09-27T20:50:13.977 に答える