2

アプリケーション用の新しい検索システムを作成しています。現在のアイデアは、データベースからより広い結果を取得し、ユーザーとの関連性を計算するためにクエリ緩和を使用することです。問題はアルゴリズムにあります。Nearest Neighbor Algorithm のようなものを使用することを検討していますが、使用方法が少しわかりません。

ユーザー検索に対するデータベース内のレコードの関連性 (%) を取得するにはどうすればよいですか?

この操作は、属性distanceおよびcategoryで行う必要があります。つまり、DB にクエリを実行すると、距離が 2 倍になり、親カテゴリを選択することでカテゴリが緩和されます。

例: ユーザーが最大 30 km 離れたものを検索し、カテゴリが「サッカー」である場合、DB から 60 km までのすべてのレコードと「ballSports」を取得します (次のようなツリーで: sports->fullContact ->ballSports->soccer なので、サッカー、フットボール、ラグビーなどのスポーツを取得します)。

この % も、ユーザーの属性の重みを考慮して計算する必要があります。ユーザーがカテゴリを距離よりも重要であると考える場合、関連性を計算する際にこれを考慮する必要があります。

カテゴリ ツリーと距離を計算する式の良い例は、3 ページにあります

その式を属性に適用するにはどうすればよいですか? ところで、私は MongoDB を使用しているため、すべてのデータがドキュメント内にあり、他のテーブルとは関係ありません。

ありがとうございました

4

1 に答える 1

2

私は、検索結果に従来のリレーショナルデータベースとテーブルを使用していると仮定して、次のようなフラットな構造から始めます。

| categoryId | 緯度| 経度| parentCategoryId |

したがって、親カテゴリに基づくリラックスカテゴリは、ユーザーが入力したカテゴリの親ノードに基づく子ノードの単純なツリー検索である可能性があります(すでにメモリにツリーがある場合)。カテゴリテーブルでSQL結合を使用することはできますが、私の経験から、アルゴリズムをJavaに変換する方が優れています。テスト/リファクタリングが簡単で、予測時間/空間の複雑さを備えたさまざまなアルゴリズムを取得できます。反対側のSQLは、実行プランのコストに少し頭痛の種を与える可能性があります。これは、異なるdbプロバイダー間で劇的に異なる場合があります。

距離と複数のカテゴリの一致に基づいて、ユーザーとの関連性を%で取得するにはどうすればよいですか?最初に何を表示するか-ユーザーがサッカーに参加した場合、サッカーまたはルビー?

ええと、それは本当に良い質問で、良い答えはわかりませんが、私がすることは、次の方法でグーグル検索からの既存のデータを使用することです:ユーザーがサッカー球技カテゴリの子)に入ったとすると

  • 距離でソートされたすべてのサッカーゲームに最高の関連性を割り当てます(ユーザー入力)
  • サブカテゴリ名で使用される 球技(親カテゴリ)という単語の頻度に基づいて、関連するカテゴリに関連性を割り当てます。
    • ボールスポーツサッカー」の場合、「599,000,000」の結果はグーグル検索になります
    • ボールスポーツラグビー」の場合、「89,200,000」の結果がグーグル検索になります
    • 上記に基づいて、すべてのサッカーゲームを距離で並べ替えて表示し、次にすべてのサッカーゲーム(グーグルの1位)、次にすべてのラグビーゲーム(グーグルの2位)を表示します。

Googleの検索結果のランク付けは、プログラムで簡単に事前計算したり、動的に取得したりできます(カテゴリを頻繁に変更する予定がない限り、動的には行いません)。

ユーザーとして、私はこの出力に満足しているので、あなたの考えを教えてください:-)

編集:私は論文を読みましたが、あなたの場合、類似性の式は2つの単語間の類似性を計算するために簡略化できるようです。

これを行う1つの方法は、2つのカテゴリのワードグラムのグーグルランクを取得することです(「サッカーラグビー」は「199,000,000」を提供し、「サッカーサッカー」は「441,000,000」を提供します)。見た目は十分です。

なぜ私はグーグルランクに夢中になっているのですか?これらの人は、スポーツのWebサイト、記事、およびドメインの問題に関連するデータに基づいた無数のデータを持っています。男性が紙を作成する場合(Western Air Ltd.)-データは内部ドメインに固有であり、ドメインを使用して類似性を処理する必要があります(機能の数、各機能の重要度の重み付けなど)

于 2012-10-01T12:06:20.980 に答える