20121123 groonga nanapi

30
groonga を囲む夕べ - nanapi 利用事例 - - nanapi 利用事例 - 株式会社 nanapi CTO 和田修一 [email protected]

Upload: shuichi-wada

Post on 03-Jul-2015

857 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: 20121123 groonga nanapi

groonga を囲む夕べ - nanapi 利用事例 - - nanapi 利用事例 -

株式会社 nanapi CTO 和田修一[email protected]

Page 2: 20121123 groonga nanapi

自己紹介

• サイト内検索として利用• 検索のサジェストとして利用

活用事例

困ったこと&ほしい機能

本日のアジェンダ

Page 3: 20121123 groonga nanapi

自己紹介

和田修一 (わだっぷ)名前

株式会社 nanapi 取締役 CTO

所属

Unix 的なアレ - http://d.hatena.ne.jp/wadap/

BLOG

Page 4: 20121123 groonga nanapi

nanapi ご存知ですか?

リリース月間 UU月間 PV記事数

: 2009 年 9 月: 1700 万: 5000 万: 50000 件

Page 5: 20121123 groonga nanapi

いままでの検索エンジンの経緯

2009 2009年年99月月 検索なんてできなかった 検索なんてできなかった

2010 2010年年33月月 Tritonn Tritonn導入導入

2012 2012年年44月月 mroonga mroonga導入導入

Page 6: 20121123 groonga nanapi

mroonga の wrapper mode を利用

利用方法

※innoDB の Transaction を利用したいため

Page 7: 20121123 groonga nanapi

主につかっている場所

サイト内検索サイト内検索

検索サジェスト検索サジェスト

Page 8: 20121123 groonga nanapi

主につかっている場所

サイト内検索サイト内検索

検索サジェスト検索サジェスト

Page 9: 20121123 groonga nanapi

実際につかっている場所 その1

サイト内検索サイト内検索

Page 10: 20121123 groonga nanapi

ただ全部のデータをつっこめばいいのだが ...

wiki のスタイルをとっていたため、複数バージョンを保有している

Page 11: 20121123 groonga nanapi

記事マスタデータ

Ver1 Ver2 Ver3

Ver1 Ver2 Ver3

記事マスタ DB 内に複数のバージョンを保有

記事記事

記事記事

Page 12: 20121123 groonga nanapi

テーブル構造的には

記事マスタ記事マスタ 文章文章

1記事マスタに対して、文章を複数保有1記事マスタに対して、文章を複数保有

Page 13: 20121123 groonga nanapi

その他にも検索条件追加したり、ソート条件などもいろいろ入れたくなる

将来的なことを考えても ...

Page 14: 20121123 groonga nanapi

記事マスタ (MySQL)

Pageview(TokyoTyrant)

評価情報( MySQL )

カテゴリー階層データ (MySQL)

検索用データ

検索用にテーブルを用意して、マージ

・記事保存時のコールバック・バッチ処理

サイト内検索

PVPV のような随時変わるもの以外は、のような随時変わるもの以外は、ほぼ全てコールバックメソッドで保存ほぼ全てコールバックメソッドで保存

Page 15: 20121123 groonga nanapi

主につかっている場所

サイト内検索サイト内検索

検索サジェスト検索サジェスト

Page 16: 20121123 groonga nanapi

実際につかっている場所 その2

検索サジェスト検索サジェスト

Page 17: 20121123 groonga nanapi

サジェストの元データとして

サジェストのデータに、階層構造データを利用

Page 18: 20121123 groonga nanapi

検索ワードサジェストの出し方

恋愛

恋愛したい

心構え

チャンスを逃さない

女性の見抜き方

男性の見抜き方

男性編

女性編

男心を理解する

いい女になる

女子力を高める

モテる方法

Page 19: 20121123 groonga nanapi

編集+ SEO 解析観点

検索ワードサジェストの出し方

Page 20: 20121123 groonga nanapi

id parent_id 階層名

(短い)

階層名(長い) ローマ字

1 0 恋愛のハウツー 恋愛 rennai

2 1 恋愛したい これから恋愛したい人のためのハウツー rennai

3 2 心構え 恋をしたい人の心構え kokorogamae

4 2チャンスを逃さな

い恋のチャンスを逃さない方法 tyansuwonogasanai

オーソドックスな階層構造管理オーソドックスな階層構造管理

テーブル構造

Page 21: 20121123 groonga nanapi

インデックスの貼り方

id parent_id 階層名

(短い)

階層名(長い) ローマ字

1 0 恋愛のハウツー 恋愛 rennai

2 1 恋愛したい これから恋愛したい人のためのハウツー rennai

3 2 心構え 恋をしたい人の心構え kokorogamae

4 2チャンスを逃さな

い恋のチャンスを逃さない方法 tyansuwonogasanai

階層名とローマ字で複合階層名とローマ字で複合 INDEXINDEX

Page 22: 20121123 groonga nanapi

実際の結果

良い感じの結果が返ってくる良い感じの結果が返ってくる

Page 23: 20121123 groonga nanapi

mroonga で困ったこと!

mroonga でこまったこと

Page 24: 20121123 groonga nanapi

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

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

.... と思ったら!

(∩´∀(∩´∀ `` )∩)∩ ワーイワーイ

Page 27: 20121123 groonga nanapi

mroonga でこまったこと

mroonga にあるといいな!

Page 28: 20121123 groonga nanapi

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

nanapi で利用するにあたって

nanapi での利用事例は今後FB していきたいと思います!

Page 30: 20121123 groonga nanapi