20121123 groonga nanapi

Preview:

Citation preview

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

株式会社 nanapi CTO 和田修一shuichi.wada@nanapi.co.jp

自己紹介

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

活用事例

困ったこと&ほしい機能

本日のアジェンダ

自己紹介

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

株式会社 nanapi 取締役 CTO

所属

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

BLOG

nanapi ご存知ですか?

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

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

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

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

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

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

mroonga の wrapper mode を利用

利用方法

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

主につかっている場所

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

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

主につかっている場所

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

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

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

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

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

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

記事マスタデータ

Ver1 Ver2 Ver3

Ver1 Ver2 Ver3

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

記事記事

記事記事

テーブル構造的には

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

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

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

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

記事マスタ (MySQL)

Pageview(TokyoTyrant)

評価情報( MySQL )

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

検索用データ

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

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

サイト内検索

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

主につかっている場所

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

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

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

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

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

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

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

恋愛

恋愛したい

心構え

チャンスを逃さない

女性の見抜き方

男性の見抜き方

男性編

女性編

男心を理解する

いい女になる

女子力を高める

モテる方法

編集+ SEO 解析観点

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

id parent_id 階層名

(短い)

階層名(長い) ローマ字

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

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

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

4 2チャンスを逃さな

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

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

テーブル構造

インデックスの貼り方

id parent_id 階層名

(短い)

階層名(長い) ローマ字

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

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

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

4 2チャンスを逃さな

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

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

実際の結果

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

mroonga で困ったこと!

mroonga でこまったこと

mysql > INSERT INTO search_table (id, data) VALUES (1, "foo");mysql > INSERT INTO search_table (id, data) VALUES (1, "foo");

idid をを pkpk にしていますにしています

mroonga でこまったこと

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 でこまったこと

.... と思ったら!

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

mroonga でこまったこと

mroonga にあるといいな!

mysql > SELECT ....mysql > SELECT ....MATCH (txt1,txt2) AGAINST (“*W1:1, 2:3 foo”);MATCH (txt1,txt2) AGAINST (“*W1:1, 2:3 foo”);

Tritonn ではワードの重み付けができた

TritonnTritonn ではマルチセクションでではマルチセクションで重み付けができた!重み付けができた!

nanapi で利用するにあたって

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

Recommended