Facebookは彼らの検索にユニークないくつかの機能を作り上げました-おそらくいくつかは特許を取得していますか?私が話す機能は、3つの異なる要件によって推進されます。
- 彼らのデータベースは巨大であり、通常、100万レコード未満の単一ホームのビジネスアプリでは、必要なときに必要なデータに参加することはできません。
- ユーザーの期待は、他の検索エクスペリエンス、つまりGoogleによって形作られているため、ロングテール検索クエリは、検索対象の人の名前に「フロリダ州オーランド」や「ロータリークラブ」などのキーワードを追加することで実行されます。雇用主名のような他の識別値)。
- アプリケーションから見たウィンドウに基づくと、データアーキテクチャは浅いように見えます(もちろん浅くはありません)。私が言っているのは、性別や現在の都市などのユーザープロファイルのいわゆる「基本情報」を超えて、プロファイルを一意にするものの多くが論理列に厳密に割り当てられていないということです。
したがって、データセットのサイズに関連するニーズには複雑さが存在しますが、検索に精通していないが、期待とトレーニングが提供されているユーザーコミュニティに、ユーザーに関連する結果を提供する必要があります。グーグル。
そのすべてを考えると(私の質問の改良):
a。)FaceBookに必要な検索機能のうち、注意して独自の検索アプリ/エンジンにデプロイする必要があるものは何ですか?必要に応じて、データセットの大規模なサイズ、またはユーザーの期待、およびサイトが有機的に成長し、データ間の関係を強化する必要性によって駆動されることを意味します。つまり、ユーザーです。
b。)データや検索アーキテクトが革新的で注目に値する検索機能はどれですか?
名に同義語を使用するなど、明らかなものもあります。「Bill」のクエリと「William」レコードのあいまい一致です。同義語のリストを使用して、Solrでこれを行うことができます。もちろん、これは革新的ではなく、必要な基本機能と呼んでいます。
革新的なその他のものは、私たちの注目に値します。私が注目できるイノベーションの最初の例は、検索の関連性がユーザーごとにカスタム化されていることです。「JohnSmith」と入力すると、別の検索者とは異なる結果セットが得られます(理論的には、私、ネットワーク内の人々、友人の友人などに適しています)。Googleで「ピザ」と入力するだけで、ロケールをクエリに追加することで関連する結果が得られるため、これは革新的ではないと言う前に、フォローしてください。私の望みは、この質問に対する答えと議論が、実際には、いくつかの技術的要件を構成し、検索の機能として含めるアイデアを提供することです。
例えば...
- 彼らはデータを非正規化するために通常のバッチプロセスを実行していると思いますか?(つまり、インプレースの1次の隔たり、2次の隔たりなどのリンクテーブルを作成するバッチジョブ)
- そのようなバッチまたは非正規化から、ヒット数を制限しますか?これは、論理的に最も近い「ジョン・スミス」の一致のみを返すことによって証明されます。ただし、一般的でない名前(自分の姓名など)の検索は、結果の制限の影響を受けないようであり、検索は、それらの「数度」の隔たりの完全に外側で、世界中を検索します。
- 彼らは年齢による関連性スコアを増やし、検索者と同じ年齢層に近い一致により多くの関連性を与えていますか?(コメント:そうあるべきだと思われますが、発生してはならない世代間のコミュニケーション/会議への少なくともマイナーなスピードバンプである可能性があります-婉曲的です、私は知っています)
技術的には、バックエンドで、データベースレベルで非正規化プロセスを実行し、次に「ドキュメント」にインデックスを付けるのが最善ですか?(明確化:エンタープライズ検索に統合された人にとって、「ドキュメント」はデータベースレコードと概念が似ているMOLです。..MOL)
または、データベースの非正規化はありませんか。その代わりに、検索インデックスを作成するプロセスには、各「ドキュメント」に関連情報と「ネットワーク内」またはほんの数度離れている人々を書き込むことが含まれますか?
確かに、そのような情報を前処理する必要があります。私自身、この正確なことを実際に行わなかった場合、データベースレベルでバッチで非正規化することが有利であるように思われます。これは、検索サーバーが情報を超高速で見つけるのに優れているためですが、データベースサーバーは一致するデータ(検索インデックスにない関連する列に拡張されると想定)。
したがって、検索の関連性がユーザー検索者に依存しているという概念を拡張すると、それはユーザーの最近のブラウジングアクティビティの派生物でもあることに注意してください。たとえば、「John Smith Orlando」を検索しても、「正しい」John Smithが生成されることはありませんが、John Smithを友達として追加しなくても、正しいJohn SmithのFaceBookページにアクセスした後(メールで彼のURLを取得したとします) 、ジョン・スミスでのその後の検索では、今回は実際に次回その結果が返されます。[それが古くなるまでにどれくらいかかるのだろうか、それともまったく古くなるのだろうか?]
Facebookは巨大なので、ここでは例として使用しました。JOIN
それらのサイズは、通常の形式のままであるものや、1億のレコードテーブルを繰り返し作成できないためにできないもの(リンクテーブルから別の「フォーク」から同じ人物テーブルを再結合する)など、よく考えられたアーキテクチャを強制しますまたは、派生テーブルは「友達の友達」効果を生み出すことができます)。
関連性の調整の実践は、実際にはほとんど芸術です。データセット、ビジネスルール、およびユーザーの期待は非常にユニークであるため、多目的スコアリングテンプレート、またはベストプラクティスでさえ作成することはほぼ不可能です。
そうは言っても、検索を十分にやってのける大きなサイトを見ると、エミュレートするテクニックがありますね。
FaceBookで実施されているこれらのテクニックは何ですか?そして、そのサイズを考えると、ユーザーが必要なときにORMを介して必要なものをフェッチすることはできません(ORMチャンピオンへのスラムではありません)-これには、綿密に計画された正規化、SQLレベルのインデックス作成、DE正規化、および検索サーバーが必要ですインデックス作成。
誰かがそこにあるテクニックのいくつかを提案できますか?さらに言えば、同様の検索(および大規模なデータセット)を備えた大規模なサイトでも、トピックに関する優れた提案が提供されます。