0

問題の投稿と共通するタグの数が最も多い投稿を見つけて、関連する投稿を見つけたいと考えています。SQLクエリでこれを行うことができますが、それぞれに数十のタグを持つ何千もの投稿があるので、CouchDBの方が良い選択肢になるのではないかと思っていました. もしそうなら、それはCouchDBでどのように機能しますか?

この問題を関係的に考えると、構造は次のようになります。

post: id, (other post data)
tag: id, (other tag data)
post_tag: post_id, tag_id

投稿 #X の最も関連性の高い上位 10 件の投稿を検索する SQL:

select r.post_id
from post_tag p join post_tag r on p.tag_id = r.tag_id
where p.post_id = X and r.post_id != X
group by r.post_id
order by count(*) desc
limit 10

このクエリは、投稿 X と共通するタグが最も多い上位 10 件の投稿を返します。

CouchDB から同じ結果をより効率的に取得できますか? どのように?

4

1 に答える 1

0

このクエリは、投稿Xと共通するタグが最も多い上位10件の投稿を提供します。

この種のクエリは、Map / Reduceを使用して計算するのは恐ろしいものです。これは、すべてのドキュメントについて、タグのすべての組み合わせに対してキーを生成する必要があるためです。さらに、それを効率的に達成するには、いくつかの連鎖マップ/リデュースが必要になります。したがって、CouchDBはそれを行う簡単な方法ではありません。

Marcinが書いたように、CouchDBを介して検索サーバーを「ごまかして」使用することはできますが、SQLクエリの方が洗練されているようです。

于 2012-11-02T13:20:03.613 に答える