20121123 groonga nanapi
TRANSCRIPT
![Page 2: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/2.jpg)
自己紹介
• サイト内検索として利用• 検索のサジェストとして利用
活用事例
困ったこと&ほしい機能
本日のアジェンダ
![Page 3: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/3.jpg)
自己紹介
和田修一 (わだっぷ)名前
株式会社 nanapi 取締役 CTO
所属
Unix 的なアレ - http://d.hatena.ne.jp/wadap/
BLOG
![Page 4: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/4.jpg)
nanapi ご存知ですか?
リリース月間 UU月間 PV記事数
: 2009 年 9 月: 1700 万: 5000 万: 50000 件
![Page 5: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/5.jpg)
いままでの検索エンジンの経緯
2009 2009年年99月月 検索なんてできなかった 検索なんてできなかった
2010 2010年年33月月 Tritonn Tritonn導入導入
2012 2012年年44月月 mroonga mroonga導入導入
![Page 6: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/6.jpg)
mroonga の wrapper mode を利用
利用方法
※innoDB の Transaction を利用したいため
![Page 7: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/7.jpg)
主につかっている場所
サイト内検索サイト内検索
検索サジェスト検索サジェスト
![Page 8: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/8.jpg)
主につかっている場所
サイト内検索サイト内検索
検索サジェスト検索サジェスト
![Page 9: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/9.jpg)
実際につかっている場所 その1
サイト内検索サイト内検索
![Page 10: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/10.jpg)
ただ全部のデータをつっこめばいいのだが ...
wiki のスタイルをとっていたため、複数バージョンを保有している
![Page 11: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/11.jpg)
記事マスタデータ
Ver1 Ver2 Ver3
Ver1 Ver2 Ver3
記事マスタ DB 内に複数のバージョンを保有
記事記事
記事記事
![Page 12: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/12.jpg)
テーブル構造的には
記事マスタ記事マスタ 文章文章
1記事マスタに対して、文章を複数保有1記事マスタに対して、文章を複数保有
![Page 13: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/13.jpg)
その他にも検索条件追加したり、ソート条件などもいろいろ入れたくなる
将来的なことを考えても ...
![Page 14: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/14.jpg)
記事マスタ (MySQL)
Pageview(TokyoTyrant)
評価情報( MySQL )
カテゴリー階層データ (MySQL)
検索用データ
検索用にテーブルを用意して、マージ
・記事保存時のコールバック・バッチ処理
サイト内検索
PVPV のような随時変わるもの以外は、のような随時変わるもの以外は、ほぼ全てコールバックメソッドで保存ほぼ全てコールバックメソッドで保存
![Page 15: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/15.jpg)
主につかっている場所
サイト内検索サイト内検索
検索サジェスト検索サジェスト
![Page 16: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/16.jpg)
実際につかっている場所 その2
検索サジェスト検索サジェスト
![Page 17: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/17.jpg)
サジェストの元データとして
サジェストのデータに、階層構造データを利用
![Page 18: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/18.jpg)
検索ワードサジェストの出し方
恋愛
恋愛したい
心構え
チャンスを逃さない
女性の見抜き方
男性の見抜き方
男性編
女性編
男心を理解する
いい女になる
女子力を高める
モテる方法
![Page 19: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/19.jpg)
編集+ SEO 解析観点
検索ワードサジェストの出し方
![Page 20: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/20.jpg)
id parent_id 階層名
(短い)
階層名(長い) ローマ字
1 0 恋愛のハウツー 恋愛 rennai
2 1 恋愛したい これから恋愛したい人のためのハウツー rennai
3 2 心構え 恋をしたい人の心構え kokorogamae
4 2チャンスを逃さな
い恋のチャンスを逃さない方法 tyansuwonogasanai
オーソドックスな階層構造管理オーソドックスな階層構造管理
テーブル構造
![Page 21: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/21.jpg)
インデックスの貼り方
id parent_id 階層名
(短い)
階層名(長い) ローマ字
1 0 恋愛のハウツー 恋愛 rennai
2 1 恋愛したい これから恋愛したい人のためのハウツー rennai
3 2 心構え 恋をしたい人の心構え kokorogamae
4 2チャンスを逃さな
い恋のチャンスを逃さない方法 tyansuwonogasanai
階層名とローマ字で複合階層名とローマ字で複合 INDEXINDEX
![Page 22: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/22.jpg)
実際の結果
良い感じの結果が返ってくる良い感じの結果が返ってくる
![Page 23: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/23.jpg)
mroonga で困ったこと!
mroonga でこまったこと
![Page 24: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/24.jpg)
mysql > INSERT INTO search_table (id, data) VALUES (1, "foo");mysql > INSERT INTO search_table (id, data) VALUES (1, "foo");
idid をを pkpk にしていますにしています
mroonga でこまったこと
![Page 25: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/25.jpg)
mysql > INSERT INTO search_table (id, data) VALUES (1, "foo");mysql > SELECT mysql > INSERT INTO search_table (id, data) VALUES (1, "foo");mysql > SELECT LAST_INSERT_ID();LAST_INSERT_ID();+-------------------------+| LAST_INSERT_ID() |+-------------------------+| 0 | +-------------------------+| LAST_INSERT_ID() |+-------------------------+| 0 | +-------------------------+1 row in set (0.00 sec)+-------------------------+1 row in set (0.00 sec)
(Σ(Σ ゚゚ дд ゚゚ lll)lll) ガーンガーン
mroonga でこまったこと
![Page 26: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/26.jpg)
.... と思ったら!
(∩´∀(∩´∀ `` )∩)∩ ワーイワーイ
![Page 27: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/27.jpg)
mroonga でこまったこと
mroonga にあるといいな!
![Page 28: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/28.jpg)
mysql > SELECT ....mysql > SELECT ....MATCH (txt1,txt2) AGAINST (“*W1:1, 2:3 foo”);MATCH (txt1,txt2) AGAINST (“*W1:1, 2:3 foo”);
Tritonn ではワードの重み付けができた
TritonnTritonn ではマルチセクションでではマルチセクションで重み付けができた!重み付けができた!
![Page 29: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/29.jpg)
nanapi で利用するにあたって
nanapi での利用事例は今後FB していきたいと思います!
![Page 30: 20121123 groonga nanapi](https://reader036.vdocuments.net/reader036/viewer/2022062710/5596697e1a28ab84128b4766/html5/thumbnails/30.jpg)