カウチベースでは、リデュース中/リデュース後に結果を並べ替えることができないため、何かの「トップ 10」を直接取得することはできません。カウチベース ビューでは、値は常にキーでソートされます。最良の方法は次のとおりです。
tag_name - count_value
キーと値のペアを返すビューをクエリします。tag_name
- N 分ごとに実行され、[1] から結果を取得して並べ替え、並べ替えた結果を個別のキー (つまり、"Top10Tags") に書き込むジョブを作成します。
- アプリで、主要な Top10Tags をクエリします。
これによりトラフィックが減少する可能性がありますが、結果が古くなっている可能性があります。また、couchbase が実行されている同じサーバーでその「ジョブ」を作成することもできます (つまり、小さな node.js アプリなどを作成します)。これは、ループバック トラフィックと、N 分ごとにソートするための小さな CPU 量だけを消費します。
また、_count reduce 関数を使用している場合は、数値を発行する必要はなく、null のみを使用してください。
function(doc, meta) {
if(meta.type === "json" && doc.type === 'log') {
emit(doc.tag, null);
}
}
そして、次のような複数のタグでタグ付けされたドキュメントが必要な場合
{
"type": "log",
"tags": ["tag1","tag2","tag3"]
}
マップ関数は次のようにする必要があります。
function(doc, meta) {
if(meta.type === "json" && doc.type === 'log') {
for(var i = 0; i < doc.tags.length; i++){
emit(doc.tags[i], null);
}
}
}
そのトップ10リストについてもう1つ。ディスクに保存したくない場合は、memcache バケットに保存できます。