SlideShare a Scribd company logo
ニコニコニュースと全文検索
    研究開発本部
     星野 豊


             1
自己紹介
• 2010年4月 新卒入社

• 星野 豊 (id: con_mame)

• サーバ構築・運用

• ニコニコニュース・実況・DVD・ポイント
  担当
                         2
今回のお話


MySQLを使って全文検索


      の全文検索



                3
MySQLで全文検索




             4
MySQLの全文検索
               SQL Parser

           Full Text Parser

Storage Engine API


     Storage           Full Text
     Engine             Index
                                   5
全文検索Plugin
                 SQL Parser

      Full Text Text Parser
           Full Parser (Plugin)

Storage Engine API

         Patch
     Storage
     Storage             Full Text
      Engine
      Engine              Index
     (Plugin)
                                     6
パッチを当てるPlugin

   SQL Parser

Storage Engine API

             patch

   MyISAM


                         7
Storage Engineを
           置き換えるPlugin(1)
   SQL Parser

Storage Engine API


   groonga
Storage Engine


                              8
Storage Engineを
              変えるPlugin(2)
   SQL Parser

Storage Engine API


    Sphinx
Storage Engine
SQLを使って検索
対象を登録出来
ない

                               9
Full Text Parserを
MySQL-ftppc     置換えるPlugin
                   SQL Parser

      space   mecab      bigram        Suffix   snowball

                    Full Text Parser
                                                MySQL標準
    Storage Engine API                          の Full Text
                                                  Parser



        MyISAM                Full Text
                               Index
                                                              10
ニコニコニュースでは・・・


いっぱい種類があるけど・・・
  どれを使おうか??




                 11
ニコニコニュースの検索要件
           検索結果が
  記事が公開さ   1秒以内に
  れたらすぐ検   かえってきて
   索したい     欲しい     MySQL
                    を使用
                    したい

本文とタグで
検索出来れ
 ばいい


                        12
要件で比較
         Senna   sphinx   groonga   MySQL-ftppc


要件にあう
検索       ✓ △ ✓ ✓
リアルタイム
インデックス   ✓ - ✓ ✓
 5.1対応
         - ✓ ✓ ✓
                                            13
groongaとMySQL-ftppc

• groonga storage engineはVer. 0.1が出たばかり

• groonga を使用するためにコードを書き換えな
  いといけない



                                          groonga作者
• branchのftnorm.c/ftnorm.hで置き換えて解
• 最新版でもICUライブラリを使用するとクラッ
  決!
  シュ
   • mecab plugin r126
   • メモリ周りの処理でMySQLごと落ちる
   • bigram plugin r125         MySQL-ftppc           14
ニコニコニュースでは・・・


MySQL-ftppc
   採用

                15
MySQL-ftppcとは

            • 空白で分割する
 space      • タグ検索で使用している
            • 2文字ずつindexを作成する
bigram      • 検索漏れが少ない
            • 本文検索で使用している
            • 形態素解析を使用
 mecab      • 新しい単語に弱い

            • 接尾辞配列を使用
 suffix     • index作成でクラッシュする問題がある


snowball    • 英語に適したインデックス

                                     16
要件確認
   リアルタイム
   インデックス
                 記事が公開さ
                 れたらすぐ検       性能試験
                  索したい
簡単な検索


                           検索結果が
        本文とタグで
                           1秒以内に
        検索出来れ
                           かえってきて
         ばいい
                            欲しい
                   MySQL
                   を使用
                   したい
                                     17
まとめ
• MySQLはPluginとして、用途に合わせて全文
  検索Pluginを選べる

• MySQL-ftppcは検索用途に合わせてPluginを
  使い分ける

• 用途によって性能が異なる事があるので、事
  前の検証はしっかりやりましょう
                                 18
参考
• http://sourceforge.net/apps/mediawiki/mysqlftp
  pc/index.php
  – ftppc公式サイト

• http://www.slideshare.net/hiroaki.kawai/mysqlft
  ppc
  – ftppc紹介スライド

• http://mysqlftppc.svn.sourceforge.net/
  – ftppcソース

                                                19

More Related Content

ニコニコニュースと全文検索