0

投稿の分析要件があります。つまり、特定の投稿について、それにほとんど関連する投稿のリストを返す必要があります。ロジックは、投稿内の一般的なタグの数を比較しています。例えば:

    postA = {"author":"abc",
        "title":"blah blah",
        "tags":["japan","japanese style","england"],
    }

次のようなタグが付いた他の投稿があるかもしれません:

postB:["japan", "england"]
postC:["japan"]
postD:["joke"]

基本的に、postA のタグと比較すると、postB は 2 カウント、postC は 1 カウントを取得します。postD は 0 になり、結果には含まれません。

今のところ私の理解は、マップ/リデュースを使用して結果を生成することです.マップ/リデュースの基本的な使用法は理解していますが、この特定の目的のための解決策を見つけることはできません.

何か助けはありますか?または、それを解決するためのカスタムソート機能のようなより良い方法はありますか? 私は現在python開発者であるため、pymongodbを使用しています。

4

1 に答える 1

1

タグにインデックスを作成する必要があります。

db.posts.ensure_index([('tags', 1)])

そして、postA と少なくとも 1 つのタグを共有する投稿を検索します。

posts = list(db.posts.find({_id: {$ne: postA['_id']}, 'tags': {'$in': postA['tags']}}))

最後に、Python で交差点で並べ替えます。

key = lambda post: len(tag for tag in post['tags'] if tag in postA['tags'])
posts.sort(key=key, reverse=True)

postA が少なくとも 1 つのタグを多数の他の投稿と共有している場合、これはうまく機能しないことに注意してください。Mongo からアプリケーションに大量のデータを送信することになるからです。残念ながら、Mongo 自体を使用して交差点のサイズでソートおよび制限する方法はありません。

于 2012-05-17T16:52:50.073 に答える