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