ゼットログ

よしなしごとを記す

(続)ドキュメントにタグをつける

昨日の続き。文字数の制限に引っかかったのかと思ったら、単にはてな記法の間違いで表示されていなかっただけだったorz
ついでに、もっとGROUP BYみたいな挙動を期待して、複数のタグを同時に指定することができるのかも試してみた。"tags"と"situations"というタグの組み合わせでGROUP BYしてCOUNT(*)するというもの。

//map
function(doc) {
  if (doc.tags && doc.situations) {
    doc.tags.forEach(function(tag) {
      doc.situations.forEach(function(situation) {
         emit(tag + "," + situation, 1);
       });
    });
  }
}

//reduce
function(keys, values) {
  return sum(values);
}

できた。

{"rows":[
  {"key":"DRAMA,alone","value":2},
  {"key":"DRAMA,friends","value":1},
  {"key":"DRAMA,lovers","value":1},
  {"key":"INDIA,alone","value":1},
  {"key":"INDIA,lovers","value":1},
  {"key":"LOVE,alone","value":1},
  {"key":"LOVE,lovers","value":1},
  {"key":"USA,alone","value":1},
  {"key":"USA,friends","value":1}
]}

ただ、これだとkeyの組み合わせを増やすたんびにmap関数を入れ子にしないといけないから面倒くさい。もっとスマートな方法もありそうな気がするが・・・