2011-06-29 14 views
1

ログインしたユーザーにパーソナライズされた検索結果を提供する方法には、どのようなものがありますか?私が考えることの1つの方法は、ユーザーの閲覧履歴を分析することです。履歴に基づくパーソナライズ検索の結果

トラッキング:閲覧したページや 'like'ボタンをクリックしたようなユーザーのアクティビティのログを使用して、検索結果にバイアスをかけることができます。

質問1:ユーザーの閲覧履歴をどのようにトラッキングしていますか?列があるテーブルuser_id,number_of_hits,?私は毎日1000人の訪問者を持っていて、それぞれ平均10ページを閲覧していますが、パーソナライズされた推奨が必要なときは、selectに多数のレコードがありませんか?テーブルは月に300K行で成長します!検索が行われるたびに行がselectに長くなります。 私は 'likes'を記録するためのテーブルは同じテーブルデザインを取ると思います。

質問2:検索結果に偏りはありますか?例えば、ユーザーがリンゴ製品を探していた場合、検索エンジンrealiseは、ユーザーがリンゴ製品を好きで、後でそれらに向かって検索をバイアスするのでしょうか?ページにタグを付け、訪問したページにタグのレコードを蓄積しますか?

答えて

0

おそらく、このタイプのリレーショナルデータベースを使用したくない場合は、mongodbまたはcassandraを見てください。これは、基本的に、ユーザーの履歴に新しい列を追加して、列指向のデータベースをより理に適うようにするためです。

0

月間300k行はそれほど多くはありませんが、実際はほとんどありません。このためにリレーショナル・データベースまたは非リレーショナル・データベースを使用するかどうかは関係ありません。このようなテーブル/コレクションに

  1. プットエントリ:

    タイムスタンプ、ユーザー、アクション、その他の情報

(そのことを確認してください

簡単な方法は次のとおりですできるだけ多くの情報を入れて、このデータ・ウェアハウス・テーブルを他のテーブルに結合する必要はありません。

  1. タイムスタンプでパーティション(月額1つのパーティション)

  2. すべてのデータの上に実行している日々のレポートジョブを言うと、必要な統計情報を収集し、計算し、サマリー表に書き込みしている代わりに、直接この表に逆らうことはありません。

  3. は、レポートのクエリに反映し、すべてのものとは対照的に、あなただけの最後のXの結果を格納した場合は、適切なパーティションのローカル索引をつけ

  4. は、あなたのWebフロントエンド

+0

)、ページのタグ付けは最も簡単な場合にのみ役立ちます。より良いアプローチは、ページ/ユーザー/などの間の依存関係を把握するために履歴テーブルにアソシエーションルールマイニングアルゴリズム(頻繁なアイテムセット/ aprioriなど)を実行してから、最も重要なアイテムセット(例:どのような信頼とサポートが有効です) – Mario

+0

これらはすべて私に新しいです、これはmysqlで行うことができますか?あなたはこれに関するチュートリアルを知っていますか? – Nyxynyx

+0

これは本当に難しいことではありません。 パーティション化:範囲パーティション化(http://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html) インデックス作成:単純なbtreeインデックスtablename(timestamp)にインデックスidxnameを作成します)。 mysqlでは、すべてのインデックスがデフォルトでパーティションになっています(oracleとは異なります)。 レポート/マイニングジョブには、スケジュールされたジョブ(http://dev.mysql.com/doc/refman/5.1/en/events-overview.html)の2つのオプションがあります。すなわち、必要な行を取り出し、アルゴリズムをオフラインで実行し、結果をデータベースに戻す。あなたの場合に依存します。 – Mario

0

からサマリー表に反しますそれはおそらく可能です。遅くなるかもしれませんが、うまくいくでしょう。より多くのデータを書いて、より多くのデータを読んでいるときは、いつでも影響が出ます。インデックスやクエリの最適化などの適切なDBAメソッドが役立ちますが、使用するものが何であれ、影響が出ます。

私は個人的にDBのユーザーのためのデフォルトのビューを格納し、残りの部分を追跡するためにセッションを使用します。確かに、あなたがログインするとき、歴史はありません。しかし、それを利用して、ユーザーを誘導するために重要であるか関連性があると思われる一連の特別なページを強調表示することができます。一種のハイライトシステム。より速く、より簡単で、より使いやすい。

バイアスに関しては、各レコードと配列にキーワードのセットを書き込んで、それに応じて並べ替えることができます。 PHPを使うのは大変難しいことではないでしょう。

0

私はMySQLを使用し、1ヶ月に2Mレコード(ページビュー)を使用しています。私たちは毎月、頻繁にそのテーブルに関するレポートを実行します。

テーブルは月ごとに(既に提案されているように)分割され、必要に応じてインデックスが付けられます。私も2番目の質問は、「page_view_YYMM」(YY =年、MM =月)と呼ばれる新しいテーブルを作成し、必要に応じて

いくつかのユニオンを使用して6ヶ月を超えているデータからテーブルをクリア

、 (あなたが影響したいかによって異なり

url, description 

説明は、ページまたはアイテムの内容を剥奪タグになります:私はそれに近づくような方法は簡単です、あなたの製品のリストを持つテーブルを作成することです検索)を選択し、説明に全文索引を追加し、その表に検索を追加して、ユーザーが関連性が高いと思われるサイト(カテゴリ名やブランドなど)をサーフィンしていた場合(

関連する問題