SlideShare a Scribd company logo
1 of 14
rroonga で
     生放送コメントを検索してみ
             た


           てみた


12/01/12             1
自己紹介
•   HN: てみた temita
•   Twitter: @temitan
•   興味 : rroonga,Ruby, Rails, Android
•   はてダ: http://d.hatena.ne.jp/temita/
      ↑[ あとで書く ]


              完全に一致

12/01/12                                 2
ニコ番
• ニコニコ生放送のコメントを検索できる
• http://niconama.temita.net/




12/01/12                        3
きっかけ
• 人力最速地震速報を作ってみたい
      – ニコニコ生放送とかは情報はやそう・・
      – 地震ワードの抽出が必要     地震だ!

           → バズッター的な仕組みがいるかな・・
           → コメントを検索できたほうが面白そう
                                     震度4
           → ニコ番                      はあ
                                      る!
      – プッシュ配信が必要
           → アラート通知のような仕組みがいるかな・・
           → 通知ツールのほうが面白そう・・
           → ニコニコール( Web 生放送通知ツール)
12/01/12                               4
公式枠検索 VS コメント検索
• 本家にも検索機能あるけど?
• 「かわいい」を検索した結果




12/01/12                 5
なぜ rroonga?
•   KVS のような簡単な検索エンジンがほしい
•   動的に構築して高速に検索したい
•   Ruby であれこれ操作したい
•   rroonga にはチュートリアルがある!




12/01/12                 6
rroonga を選択するときは?
• rroonga はサーバ型ではなくて組み込み型
      – 更新しながら参照にするのに強い
           • 参照ロックフリー!
      – レプリケーション機能は持っていない
           • 複数サーバで分散することは考えない方がいい
           • 使いたいときは mroonga の出番
• select クエリの書き方
      – クエリのタイミング
           • ブロックがループ文で評価されると思っていると
             はまる
           • &(AND) と |(OR) の使い方
12/01/12                              7
システム構成


   ニコ生コメント
     サーバ                          検索専用
                 Ruby on Rails        Ruby

                 passenger
                                 参照ロックフリー!
                 コメント収集
      Fetche                       Groonga file
       Fetche           Ruby
      Fetche
         rr
         r
         ruby



12/01/12                                          8
テーブルとか
            Lives
              id    Community       Live_url      Live_title   Visit_count Come_count

              111 Communities       http~coxx     雑談だよ         1           1

              222 Communities       http~coxx     凸待ち          222         2222

Comments             reference
  live_id               community               timestamp            comment
  live                  Communities             “18:56:00 2012” “ クリスマス中止だっ
                                                                て”
  live                  Communities             “18:56:01 2012” “ クルーズきた”
                                      Terms                    自動で登録される
         そのまま
                                           _key        Comments_comment
         タグに使え
                                           おっさ         11,22,33,33,55,66,77,88
         る                                 ん
                                           クルー         ,99,122,123,124,125,126
コメントからキーワードタグ生
        成
• 全部のコメントからタグ生成
      – Groonga が持っている語彙表から取ってくる
    terms = Groonga[“Terms”]
    terms.each do |record|
     tags[record.key] = record.Comments_comment if
    record.key.size > 10
    end




12/01/12                                             10
Select の書き方
• select でカジュアルに検索
• 10 分間の [ おっさん ] コメントを検索する
offset_time = 600
w = " おっさん "
time_before = Time.now - offset_time
records = comments.select do |record|
                  (record.comment =~ w) & ( record.timestamp > time_before )
end
pagenate_records = records.paginate([["_id", :descending]],
{:page => 1, :size => 10})

比較は必ず Groonga::RecordExpressionBuilder
× (time_before < record.timestamp )
○( record.timestamp > time_before )
使い方の参考にしたもの
• 本家チュートリアル
   – Select の使い方はここでわかる
• ソースコード
   – ドキュメントにないことはソースコードにあ
     る
   – るりまサーチとドキュメント
   – rroonga 本体とテストコード
• Mailing Lists
      – http://lists.sourceforge.jp/mailman/listinfo/groon
12/01/12 ga-dev                                           12
まとめ?
• rroonga
  – rroonga は小規模 ~ 中規模向き
  – 更新の激しいシステムに使える
  – Mailing Lists で質問すると幸せになれる
• コメント検索は楽しい
ご清聴ありがとうございま
                した


12/01/12                  14

More Related Content

What's hot

Mongo dbを知ろう
Mongo dbを知ろうMongo dbを知ろう
Mongo dbを知ろうCROOZ, inc.
 
Mongo db勉強会の補足
Mongo db勉強会の補足Mongo db勉強会の補足
Mongo db勉強会の補足CROOZ, inc.
 
BestGems.org -RubyGemsランキングサイトのご紹介-
BestGems.org -RubyGemsランキングサイトのご紹介-BestGems.org -RubyGemsランキングサイトのご紹介-
BestGems.org -RubyGemsランキングサイトのご紹介-Misao X
 
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)Ryuji Tamagawa
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜Masakazu Matsushita
 
GopherJS + Nashorn
GopherJS + NashornGopherJS + Nashorn
GopherJS + NashornTakuya Ueda
 
非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」Muyuu Fujita
 
2011 10-satalabo-naaon
2011 10-satalabo-naaon2011 10-satalabo-naaon
2011 10-satalabo-naaonNaoki Okino
 

What's hot (9)

Mongo dbを知ろう
Mongo dbを知ろうMongo dbを知ろう
Mongo dbを知ろう
 
Mongo db勉強会の補足
Mongo db勉強会の補足Mongo db勉強会の補足
Mongo db勉強会の補足
 
BestGems.org -RubyGemsランキングサイトのご紹介-
BestGems.org -RubyGemsランキングサイトのご紹介-BestGems.org -RubyGemsランキングサイトのご紹介-
BestGems.org -RubyGemsランキングサイトのご紹介-
 
はじめてのMongoDB
はじめてのMongoDBはじめてのMongoDB
はじめてのMongoDB
 
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
 
後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜後悔しないもんごもんごの使い方 〜アプリ編〜
後悔しないもんごもんごの使い方 〜アプリ編〜
 
GopherJS + Nashorn
GopherJS + NashornGopherJS + Nashorn
GopherJS + Nashorn
 
非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」
 
2011 10-satalabo-naaon
2011 10-satalabo-naaon2011 10-satalabo-naaon
2011 10-satalabo-naaon
 

Similar to Groonga勉強会3 生放送でコメント検索してみた

Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2Yasukazu Kawasaki
 
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Koji SHIMADA
 
RESTとRailsスタイル
RESTとRailsスタイルRESTとRailsスタイル
RESTとRailsスタイルToru Kawamura
 
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることDSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることTomohiro Nishimura
 
Chromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはChromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはgoccy
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作terurou
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムGo Sueyoshi (a.k.a sue445)
 
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめリーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめKouhei Sutou
 
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、RubyやめるってよNarihiro Nakamura
 
リーダブルコードを読んだ後
リーダブルコードを読んだ後リーダブルコードを読んだ後
リーダブルコードを読んだ後Kouhei Sutou
 
Go で Unit Test をやってみた
Go で Unit Test をやってみたGo で Unit Test をやってみた
Go で Unit Test をやってみたMasahiro Yanou
 
SpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorbSpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorbYoutarou TAKAHASHI
 
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse MoonlinxOsc2008 Opensuse Moonlinx
Osc2008 Opensuse MoonlinxKazuhisa Hara
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話Tokoroten Nakayama
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話Yuta Ohashi
 
SEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめSEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめKouhei Sutou
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときRyunosuke SATO
 
分散Key/Valueストア Kai 事例紹介
分散Key/Valueストア Kai事例紹介分散Key/Valueストア Kai事例紹介
分散Key/Valueストア Kai 事例紹介Tomoya Hashimoto
 

Similar to Groonga勉強会3 生放送でコメント検索してみた (20)

Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
 
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4
 
RESTとRailsスタイル
RESTとRailsスタイルRESTとRailsスタイル
RESTとRailsスタイル
 
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることDSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
 
Chromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはChromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するには
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
 
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめリーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
 
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
 
リーダブルコードを読んだ後
リーダブルコードを読んだ後リーダブルコードを読んだ後
リーダブルコードを読んだ後
 
Go で Unit Test をやってみた
Go で Unit Test をやってみたGo で Unit Test をやってみた
Go で Unit Test をやってみた
 
SpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorbSpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorb
 
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse MoonlinxOsc2008 Opensuse Moonlinx
Osc2008 Opensuse Moonlinx
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話
 
全文検索入門
全文検索入門全文検索入門
全文検索入門
 
SEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめSEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめ
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
分散Key/Valueストア Kai 事例紹介
分散Key/Valueストア Kai事例紹介分散Key/Valueストア Kai事例紹介
分散Key/Valueストア Kai 事例紹介
 

Recently uploaded

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

Groonga勉強会3 生放送でコメント検索してみた

  • 1. rroonga で 生放送コメントを検索してみ た てみた 12/01/12 1
  • 2. 自己紹介 • HN: てみた temita • Twitter: @temitan • 興味 : rroonga,Ruby, Rails, Android • はてダ: http://d.hatena.ne.jp/temita/ ↑[ あとで書く ] 完全に一致 12/01/12 2
  • 4. きっかけ • 人力最速地震速報を作ってみたい – ニコニコ生放送とかは情報はやそう・・ – 地震ワードの抽出が必要 地震だ! → バズッター的な仕組みがいるかな・・ → コメントを検索できたほうが面白そう 震度4 → ニコ番 はあ る! – プッシュ配信が必要 → アラート通知のような仕組みがいるかな・・ → 通知ツールのほうが面白そう・・ → ニコニコール( Web 生放送通知ツール) 12/01/12 4
  • 5. 公式枠検索 VS コメント検索 • 本家にも検索機能あるけど? • 「かわいい」を検索した結果 12/01/12 5
  • 6. なぜ rroonga? • KVS のような簡単な検索エンジンがほしい • 動的に構築して高速に検索したい • Ruby であれこれ操作したい • rroonga にはチュートリアルがある! 12/01/12 6
  • 7. rroonga を選択するときは? • rroonga はサーバ型ではなくて組み込み型 – 更新しながら参照にするのに強い • 参照ロックフリー! – レプリケーション機能は持っていない • 複数サーバで分散することは考えない方がいい • 使いたいときは mroonga の出番 • select クエリの書き方 – クエリのタイミング • ブロックがループ文で評価されると思っていると はまる • &(AND) と |(OR) の使い方 12/01/12 7
  • 8. システム構成 ニコ生コメント サーバ 検索専用 Ruby on Rails Ruby passenger 参照ロックフリー! コメント収集 Fetche Groonga file Fetche Ruby Fetche rr r ruby 12/01/12 8
  • 9. テーブルとか Lives id Community Live_url Live_title Visit_count Come_count 111 Communities http~coxx 雑談だよ 1 1 222 Communities http~coxx 凸待ち 222 2222 Comments reference live_id community timestamp comment live Communities “18:56:00 2012” “ クリスマス中止だっ て” live Communities “18:56:01 2012” “ クルーズきた” Terms 自動で登録される そのまま _key Comments_comment タグに使え おっさ 11,22,33,33,55,66,77,88 る ん クルー ,99,122,123,124,125,126
  • 10. コメントからキーワードタグ生 成 • 全部のコメントからタグ生成 – Groonga が持っている語彙表から取ってくる terms = Groonga[“Terms”] terms.each do |record| tags[record.key] = record.Comments_comment if record.key.size > 10 end 12/01/12 10
  • 11. Select の書き方 • select でカジュアルに検索 • 10 分間の [ おっさん ] コメントを検索する offset_time = 600 w = " おっさん " time_before = Time.now - offset_time records = comments.select do |record| (record.comment =~ w) & ( record.timestamp > time_before ) end pagenate_records = records.paginate([["_id", :descending]], {:page => 1, :size => 10}) 比較は必ず Groonga::RecordExpressionBuilder × (time_before < record.timestamp ) ○( record.timestamp > time_before )
  • 12. 使い方の参考にしたもの • 本家チュートリアル – Select の使い方はここでわかる • ソースコード – ドキュメントにないことはソースコードにあ る – るりまサーチとドキュメント – rroonga 本体とテストコード • Mailing Lists – http://lists.sourceforge.jp/mailman/listinfo/groon 12/01/12 ga-dev 12
  • 13. まとめ? • rroonga – rroonga は小規模 ~ 中規模向き – 更新の激しいシステムに使える – Mailing Lists で質問すると幸せになれる • コメント検索は楽しい