MySQLを通じた全文検索エンジンSenna/groongaの利用について
-
Upload
tasuku-suenaga -
Category
Technology
-
view
14.826 -
download
0
description
Transcript of MySQLを通じた全文検索エンジンSenna/groongaの利用について
![Page 1: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/1.jpg)
1
MySQLを通じた全文検索エンジンSenna/groongaの利用について
(有)未来検索ブラジル・(株)wktk末永 匡 a.k.a. グニャラくんTwitter: @tasukuchan
ニコニコミュニティ: co11704
![Page 2: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/2.jpg)
未来検索ブラジルとドワンゴ• お招きいただきありがとうございます• 古くから取引関係あり、ニワンゴに出資• ブラジルでの初仕事は、ドワンゴ着メロ全文検索システムのコンサルティング
2
![Page 3: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/3.jpg)
勉強会も終盤です• 真面目に聴講しているひと
‒ 集中していて、すでに疲れて眠い• 真面目に聴講していないひと
‒ そもそも眠い
3
結論 : 全員眠い
![Page 4: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/4.jpg)
気楽に聞いてください
4
![Page 5: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/5.jpg)
5
自己紹介 (1)• (有)未来検索ブラジルにて、「2ちゃんねる検索」や「ニコニコ大百科」の開発に従事
• 「グニャラくん」という名前で活動• (株)wktkというペーパーカンパニーの代表
![Page 6: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/6.jpg)
6
自己紹介 (2)
鳥居みゆっき グニャラくん30歳15歳 42歳
某社会長2倍!
(参考)
![Page 7: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/7.jpg)
7
検索にまつわる背景• いわゆるCGMの台頭
‒ ニコニコ動画‒ 2ちゃんねる‒ Twitter‒ Wikipedia‒ etc…
• これらに共通する特徴は…
![Page 8: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/8.jpg)
8
CGMに対応した検索エンジン• CGMに共通する特徴
‒ 頻繁な更新・常時更新‒ 巨大な文書量
対応した検索エンジンが求められる
![Page 9: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/9.jpg)
9
頻繁な更新・常時更新• コンテンツが頻繁かつ常に更新される• 更新されたものをすぐに検索したい!というニーズ‒ 2ちゃんねるにおける地震関係の掲示板‒ 地震直後に検索したい!
• 文書の追加更新が低速だったり、不可能である検索エンジンは不向き
更新が高速なエンジンが求められる
![Page 10: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/10.jpg)
10
巨大な文書量• 文書量がとっても多い!
‒ 頻繁な更新・常時更新の結果‒ ユーザが、自分が見たいコンテンツにたどり着くことが困難
‒ コンテンツ選択手段として検索のニーズが高まる
• 「京都」で検索して「東京都」が検索対象となるような検索エンジンは不向き
精度が高い検索エンジンが求められる
![Page 11: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/11.jpg)
11
CGMに対応するためには?• CGMに共通する特徴
‒ 頻繁な更新・常時更新‒ 巨大な文書量
鮮度・精度の高い検索エンジン
![Page 12: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/12.jpg)
12
発表の流れ• 検索エンジンにおける基本性能の尺度について解説
• Sennaについて紹介• groonga開発の経緯• groongaについて紹介
検索エンジンの性能はどう評価するの?
![Page 13: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/13.jpg)
13
検索エンジンにおける基本性能の尺度
•検索速度•更新速度• 文書容量•適合率•再現率
5つの尺度がある!
![Page 14: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/14.jpg)
14
検索速度と更新速度• 検索速度
‒ 検索応答時間/検索スループット‒ 主にユーザの待ち時間に影響する
• 更新速度‒ 文書の新規作成時における処理速度‒ 既存文書の更新・削除時における処理速度‒ 主に検索結果の鮮度に影響する
![Page 15: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/15.jpg)
15
検索エンジンのアルゴリズム•逐次検索方式(grep/LIKE検索)• シグネチャ方式• 接尾辞配列方式• 索引検索方式
![Page 16: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/16.jpg)
16
逐次検索方式• 対象文書を逐次スキャンする
‒ grepやSQLのLIKE条件と同様‒ 検索時に文書本体のみあればよい
•インデックスなどの余分なデータが必要ない• 更新速度:高
‒ インデックス等を作成しないため• 検索速度:低
‒ データを逐次スキャンするため
![Page 17: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/17.jpg)
17
索引検索方式• ある単語が、どの文書にあるかを保持
‒ 「転置インデックス」というデータ構造‒ (例) 書籍巻末にある用語索引
• 更新速度:低• 検索速度:高
検索対象語 文書番号列インド 1, 10, 12インドア 5, 10, 11
インドネシア 10
![Page 18: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/18.jpg)
18
各種方式の特徴
検索速度と更新速度はトレードオフ関係
![Page 19: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/19.jpg)
19
まとめ:検索速度と更新速度のトレードオフ
• 検索速度と更新速度にはトレードオフ関係がある‒ 逐次検索方式
•検索速度 : 低•更新速度 : 高
‒ 索引検索方式•検索速度 : 高•更新速度 : 低
• 今日は、索引検索方式(転置インデックスの利用)を前提としてお話します
![Page 20: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/20.jpg)
20
文書容量/適合率/再現率
• 文書容量‒ どれくらいの文書量を扱えるか
•適合率‒ 「検索ノイズ」がどのくらい少ないか•「先生」で「この先生きのこる」が検索
•再現率‒ 「検索漏れ」がどのくらい少ないか
•「腐向けAPH」で「腐/向/け/A/P/H 」が検索•両者はトレードオフ関係にある
![Page 21: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/21.jpg)
21
まとめ : 全文検索の基礎について• 検索エンジンにおける基本性能の尺度‒ 検索速度, 更新速度, 文書容量, 適合率, 再現率
•上記尺度間はトレードオフ関係•どの尺度を重視するかによって、検索エンジンの設計が決まる‒ (例)鮮度と精度を重視 :更新速度と適合率を重視
![Page 22: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/22.jpg)
22
![Page 23: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/23.jpg)
23
発表の流れ• 検索エンジンにおける基本性能の尺度について解説
• Sennaについて紹介• groonga開発の経緯• groongaについて紹介
Sennaはどんな性能尺度を重視してるの?
![Page 24: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/24.jpg)
24
全文検索エンジンSenna
http://qwik.jp/senna/
![Page 25: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/25.jpg)
25
Senna• (有)未来検索ブラジルを中心に開発されていた全文検索エンジン
• オープンソースライセンス(LGPL)‒ 無償で商用利用可
• 現在はメンテナンスフェーズ
![Page 26: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/26.jpg)
26
Sennaの三大特徴• 高速• 高精度• 高柔軟性
• 順に説明していきます
![Page 27: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/27.jpg)
27
高速• 検索が高速
‒ 転置インデックスを採用‒ 高速な検索ができる
• 更新が高速‒ 既存インデックスへの追加・変更が高速‒ 鮮度の高い情報をインデックス化できる
高速化には実装上の工夫が不可欠
![Page 28: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/28.jpg)
28
高速化の工夫• 転置インデックスに適したバッファ機構
‒ インデックスの一部をメモリにキャッシュ‒ I/O負荷の減少
• 検索時インデックスの排他制御が不要‒ 高い並列性
• インデックス自動再配置(=デフラグ)‒ インデックスの不要な領域を再配置‒ 更新・削除による性能劣化を防ぐ
高速な更新・検索を志向した実装
![Page 29: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/29.jpg)
29
高精度• Sennaは精度重視の設計
‒ 速度は、精度を阻害しない範囲で追求• 具体的には
‒ 1. 適合率‒ 2. 再現率の順番で重視
大規模なコンテンツを対象とした検索では、適合率が重要となるため
![Page 30: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/30.jpg)
30
適合率と再現率の両立• 適合率と再現率はトレードオフの関係
‒ どちらも高いほうがよい• Sennaでは両尺度を高める方式を採用
‒ 形態素の部分一致検索が可能なデータ構造‒ 「京都」で検索して「東京都」を含む文書が検索可能 (詳細は省く)
![Page 31: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/31.jpg)
31
高柔軟性• RDBMS組み込み
‒ SQLを用いた全文検索問い合わせが可能• MySQL + Senna = Tritonn• PostgreSQL + Senna = textsearch_senna
![Page 32: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/32.jpg)
32
書誌情報の重要性• 書誌情報 : 文書に付随した各種情報のこと• 実用上の要求
‒ 文書作成日で並べ替えて表示したい‒ 非公開フラグが立っている文書を除きたい‒ タイトルに検索語が登場するものを、内容のみに検索語が登場するものより優先的に表示したい
RDBMS/SQLはこれらの要求を満たす
![Page 33: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/33.jpg)
33
Tritonn : MySQL + Senna• MySQLが文書と書誌情報を管理• SQLの高い記述力 = 高柔軟性
‒ 複雑な問い合わせが可能‒ 他カラムでの絞り込み・並び替え・グループ化
![Page 34: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/34.jpg)
34
Tritonnのクエリ例• (例) 全文検索を行い、なおかつ、最終更新日がある日を超えるレコード群を取得
• SELECT * FROM table1WHERE MATCH(body)AGAINST(‘クエリ’)ANDlast_update > '2010/01/31';
SQLを用いた柔軟な検索
![Page 35: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/35.jpg)
35
以上がSennaの三大特徴でした•高速•高精度•高柔軟性
![Page 36: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/36.jpg)
36
![Page 37: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/37.jpg)
37
発表の流れ• 検索エンジンにおける基本性能の尺度について解説
• Sennaについて紹介• groonga開発の経緯• groongaについて紹介
Sennaでは実現できなかったことは?
![Page 38: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/38.jpg)
groonga開発の経緯• Sennaは、MySQL経由で使われる(=Tritonnの利用)が多かった
38
その功罪があった
![Page 39: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/39.jpg)
39
Tritonnのよいところ• MySQLの資産が使える
‒ 人的資産(エンジニア)‒ 物的資産(ソフトウェア)
• SQLを用いた柔軟なクエリが書ける
悪いところもあった
![Page 40: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/40.jpg)
40
Tritonnの悪いところ• 更新が遅い!• 更新時に、検索スループットが悪い!• 書誌情報を用いた絞込み・ソート・グループ化が遅い
「高速な更新・検索」をうたっていたのに?
![Page 41: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/41.jpg)
41
どうしてこうなった
![Page 42: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/42.jpg)
42
Tritonnの仕組み• MySQLはストレージエンジンというデータ保存部分を選択できる‒ MyISAM‒ InnoDB
• TritonnはMyISAMの全文検索を置換‒ 文章の本文や書誌情報をMyISAMに保存
MyISAM利用時のみ全文検索可能
![Page 43: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/43.jpg)
43
MyISAMとテーブルロック• MyISAMはテーブル単位でロックを行う
‒ 更新スループットの低下‒ 更新時に、検索を阻害
• Sennaの「高速な更新」‒ ロックフリーなデータ構造‒ データ更新時に検索を阻害しない
ムジュン!
![Page 44: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/44.jpg)
書誌情報を用いた検索時のロス• 書誌情報を用いた検索時に、MySQLのインデックスなどがうまく使われない‒ Sennaで検索した結果0.01sec
‒ MySQLで書誌情報のカラムをロード、それを用いた絞込み・ソート・グループ化2.xx sec
44
互いの持っている高速化機構を生かし切れない
![Page 45: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/45.jpg)
45
めざせTritonn越え• TritonnではSennaの設計特性を活かすことが出来なかった。
設計特性を活かした検索エンジンの開発へ
![Page 46: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/46.jpg)
そこで開発したのが…
46
![Page 47: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/47.jpg)
47
あから2010
![Page 48: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/48.jpg)
48
間違えた…
http://groonga.org/
![Page 49: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/49.jpg)
49
発表の流れ• 検索エンジンにおける基本性能の尺度について解説
• Sennaについて紹介• groonga開発の経緯• groongaについて紹介
groongaはどんな検索エンジンなの?
![Page 50: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/50.jpg)
50
groonga• groonga.orgにおいて開発されていた全文検索エンジン
• オープンソースライセンス(LGPL)‒ 無償で商用利用可
![Page 51: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/51.jpg)
51
groongaの特徴• 書誌情報も管理・保存
‒ MyISAMに依存しない• groonga単体で全文検索可能
‒ MySQLそのものに依存しない
「高速な更新」を活かす
![Page 52: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/52.jpg)
52
groongaの利用形態• groonga単体
‒ ネットワークサーバ‒ コマンドライン
• groongaライブラリ‒ C言語‒ Ruby
![Page 53: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/53.jpg)
53
ネットワークサーバ• 対応プロトコル
‒ HTTP GET‒ memcached バイナリプロトコル‒ 独自プロトコル‒ MessagePack(未実装)
• HTTP経由では、管理ツールが利用できる‒ phpMyAdminみたいなもの
![Page 54: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/54.jpg)
54
クエリ言語• クエリの実行系を搭載
‒ 条件はJavaScriptライクな文法‒ 結果はJSON(P)/XML/CSV‒ ソートや絞込みもできるよ!
• 例:http://server/d/select.json?table=table1&filter=body @ 'クエリ' && last_update > '2010/01/31' &offset=0&limit=5&callback=func
![Page 55: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/55.jpg)
55
その他の特徴• ドリルダウン(ファセット)• ジオサーチ(地理情報検索)• サジェスト(検索キーワード候補の提案)
![Page 56: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/56.jpg)
56
ドリルダウン• 検索結果を、特定のカラムでグループ化
‒ GROUP BY• (例)サイト横断検索、件数の降順でソート
‒ dwango.jp ☆取放題DX (232)‒ dwango.jp うた (130)‒ dwango.jp フル (65)‒ dwango.jp コール (32)‒ dwango.jp ボイス (13)
![Page 57: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/57.jpg)
57
ジオサーチ• 地理情報の検索
‒ ある地点からの距離計算‒ ある地点を中心とした円内にあるかどうか‒ ある2点で定義される矩形内にあるかどうか‒ 楕円体としてきちんと計算してるよ!
• 日本測地系/世界測地系両対応• インデックスを用いて高速に検索可能
![Page 58: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/58.jpg)
58
サジェスト• ユーザの検索クエリログを収集
‒ 検索フォームに入力された文字を、途中経過を含めてすべてログ収集
• 上記ログを解析し、オススメのクエリを提案する‒ 提案 (「全文検索」→「groonga」)‒ 訂正 (「gloonga」→「groonga」)‒ 補完 (「gro」→「groonga」)
![Page 59: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/59.jpg)
groongaすげー• MySQLにもう頼らないよ!• 更新速度も上がったよ!• いろんな機能があるよ!
59
あ、あれ…
![Page 60: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/60.jpg)
あ、あれ!?…• 本日のテーマは、MySQLのプラグイン
60
MySQL経由でもgroongaを使いたい!
![Page 61: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/61.jpg)
61
MySQL経由で使いたい• groongaストレージエンジン(mroonga)‒ MySQL + groonga‒ MyISAMそのものを置換する
更新・検索性能の問題を回避
![Page 62: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/62.jpg)
62
Sphinxとの比較• MySQLのストレージエンジンとして検索が可能。
• version 0.9.9からは、MySQLのプロトコルを直接理解し、SphinxQLというSQLのサブセットで検索ができる。
groongaストレージエンジンは前者
![Page 63: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/63.jpg)
63
分散構成• 直接のソリューションは現在ない
‒ アプリケーション側での分散• groongaストレージエンジン + SPIDERストレージエンジン
MySQL経由で、しかも分散構成で利用可能
![Page 64: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/64.jpg)
64
ドキュメント• 詳細な特徴はhttp://groonga.org/docs/
• チュートリアルを一通りこなすと、だいたいの機能の使い方が分かる…はず
![Page 65: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/65.jpg)
65
導入事例• groongaデーモン
‒ 某Webサイトでのアイテム検索• groongaライブラリ(Ruby)
‒ 某番組情報サイトの検索‒ buzztter
商用・高負荷サイトでの導入実績あり
![Page 66: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/66.jpg)
66
注意点• 64bit専用
‒ OSの仮想メモリ機構を最大限に利用• ファイルディスクリプタMAXあげる
‒ カラムごとに1ファイル‒ ネットワークサーバも兼用
• groongaストレージエンジンは、まだTritonnの域に達していない。
2010/12/29リリースで改善したいところ
![Page 67: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/67.jpg)
67
まとめ (1)• groongaは、Sennaの特徴である「高速な更新」を真に実現するために書かれた全文検索エンジンである。
• groongaを、MySQLのストレージエンジンとして使うことができる。
![Page 68: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/68.jpg)
まとめ (2)• ためしに使ってミルノデス• 開発者募集中!! バグ報告募集中!!• ブラジルでは検索エンジニアを大募集中です!!
68
![Page 69: MySQLを通じた全文検索エンジンSenna/groongaの利用について](https://reader036.fdocuments.net/reader036/viewer/2022081801/54be75354a7959237f8b45c0/html5/thumbnails/69.jpg)
69
Thank you!