Rabbit Slide Show

Groonga Meetup 2014/04/29

2014-04-29

Description

2014年4月29日に行われたGroonga meetupで使用したスライドです。 GroongaやMroongaを初めて触れる人向けに演習を通じて基本をおさえてもらうための資料です。 今回は主にGroonga中心のサンプルを用意しました。

Text

Page: 1

Groonga
meetup #2
林健太郎
クリアコード
Groonga meetup
2014/04/29
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 2

はじめに
開催の目的
今回の内容
Any Questions?
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 3

開催の目的(1)
「全文検索をし
たい人の最初の
一歩を踏みだし
やすくしよう」
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 4

今回の内容(1)
全文検索事始め
GroongaやMroongaの特長の紹介
最新版の導入について
GroongaやMroongaの環境構築
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 5

今回の内容(2)
題材の説明と実際の演習(随時)
Any Questions?
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 6

全文検索事始め
既存のシステムに全文検索導入
したい
手持ちのメタ情報を効率良く検
索したい
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 7

Groongaの特長(1)
全文検索と即時更新
参照ロックフリー
更新しつつ検索OK
カラムストアを採用
集計クエリを高速に処理可能
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 8

Groongaの特長(2)
豊富なトークナイザー
検索漏れないことを重視しますか?
検索精度を重視しますか?
位置情報検索のサポート
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 9

Groongaの特長(3)
アプリケーションへの組込み
ライブラリとして活用可能
実はバックエンドでGroongaが動い
ていることも
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 10

Groongaとパッケージ
Debian
Ubuntu
CentOS
Fedora
Windows
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 11

Groonga on Debian
Debian 7.4 (wheezy)
Debian 8 (jessie)
Debian unstable (sid)
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 12

Groonga on Ubuntu(1)
Ubuntu 12.04 (Precise)
Ubuntu 12.10 (Quantal)
明日でサポート終了 4.0.1まで
Ubuntu 13.04 (Raring)
すでにサポート終了 3.1.2まで
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 13

Groonga on Ubuntu(2)
Ubuntu 13.10 (Saucy)
7月にサポート終了
Ubuntu 14.04 (Trusty)
今月からサポート開始
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 14

Groonga on CentOS
CentOS 5/6
中国語のトークナイザーは未サポー
ト
CentOS 7?
まだrcベースらしいのでしばらく先
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 15

Groonga on Fedora(1)
Fedora 20
中国語のトークナイザーは未サポー
ト
Groonga公式とFedora公式に違いは
ない
Fedoraでリリースするのはちょっと
遅れる(2-3週)
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 16

Groonga on Fedora(2)
リリース短縮にはKarmaが必要
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 17

FedoraでKarmaを稼ぐ
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
https://admin.fedoraproject.org/updates/
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 18

FedoraでKarmaを稼ぐ(1)
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
https://admin.fedoraproject.org/updates/
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 19

FedoraでKarmaを稼ぐ(2)
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 20

FedoraでKarmaを稼ぐ(2)
Testingって?
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 21

FedoraでKarmaを稼ぐ(3)
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 22

FedoraでKarmaを稼ぐ(4)
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 23

FedoraでKarmaを稼ぐ(4)
works for meコメントって?
これを送信するとKarma +1
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 24

Mroongaの特長(1)
導入しやすいプラグイン形式
他のストレージエンジンとの連
携
ラッパーモード
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 25

Mroongaの特長(2)
データ更新が多くても検索性能
が良い
LIKEからの置き換えも比較的容
易
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 26

Mroongaとパッケージ
Debian
Ubuntu
CentOS
Fedora
Windows
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 27

Mroonga on Debian
MySQL 5.5系
Debian 7.4 (wheezy)
Debian 8 (jessie)
Debian unstable (sid)
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 28

Mroonga on Ubuntu(1)
MySQL 5.5系
Ubuntu 12.04 (Precise)
Ubuntu 12.10 (Quantal)
明日でサポート終了 4.01まで
Ubuntu 13.04 (Raring)
すでにサポート終了 3.12まで
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 29

Mroonga on Ubuntu(2)
MySQL 5.5系
Ubuntu 13.10 (Saucy)
7月にサポート終了
Ubuntu 14.04 (Trusty)
今月からサポート開始
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 30

Mroonga on CentOS 5
CentOS 5
以前はMySQLが古すぎたので、
MySQL 5.6対応パッケージを提供
MySQL 5.5(SCL)対応パッケージに移
行
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 31

Mroonga on CentOS 6
CentOS 6
MySQL 5.1しか使えないというのは
古い情報です!
MySQL 5.5対応(SCL)パッケージに移
行
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 32

Mroonga on CentOS
CentOS 5やCentOS 6でMySQL 5.6
wingリポジトリをお勧めしています
http://wing-repo.net/
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 33

Mroonga on Fedora
Fedora 20
MySQL 5.5 & MariaDB 5.5対応
Fedora公式リポジトリでは未リリー
ス
Mroonga含めてインストールしたいなら
Groongaリポジトリを登録する
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 34

環境構築してみよう
Groongaのインストール
Mroongaのインストール
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 35

どれをインストールしたらいい?(1)
groonga
ちょっとお試しで使うならコレ
コマンドラインで使うだけ
いろいろ指定すればサーバーとして
も利用可
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 36

どれをインストールしたらいい?(2)
groonga-server-http
サーバー立てるならコレ
groonga-server-gqtp
特に理由がなければスルー
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 37

どれをインストールしたらいい?(3)
groonga-httpd
不満がでてきたらコレ
POSTしたいならコレ一択
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 38

どれをインストールしたらいい?(3)
groonga-httpd
不満がでてきたらコレ
POSTしたいならコレ一択
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 39

Install Groonga(1)
⏳Groongaをインストールしてみましょう
groonga-httpd
http://groonga.org/ja/docs/install.html
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 40

Install Groonga(2)
⏳トークナイザーやノーマライザーをインストールし
てみましょう
groonga-tokenizer-mecab
groonga-normalizer-mysql
http://groonga.org/ja/docs/install.html
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 41

Install Groonga(3)
⏳Groongaが起動しているか確認しましょう
% curl http://localhost:10041/d/status
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 42

Install Groonga(4)
⏳Groongaが起動していない場合は起動しましょう
% sudo service groonga-httpd start
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 43

Install Mroonga(1)
⏳Mroongaをインストールしてみましょう
http://mroonga.org/ja/docs/install.html
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 44

Install Mroonga(2)
⏳Mroongaが使えるか確認しましょう
mysql> show engines;
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 45

Install Mroonga(3)
⏳インストールされているとどうなる?
mysql> SELECT * FROM mysql.plugin;
+---------+---------------+
| name
| dl
|
+---------+---------------+
| mroonga | ha_mroonga.so |
+---------+---------------+
1 row in set (0.00 sec)
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 46

Install Mroonga(4)
⏳インストールされているとどうなる?
mysql> SELECT * FROM mysql.func;
+--------------------+-----+---------------+----------+
| name
| ret | dl
| type
|
+--------------------+-----+---------------+----------+
| last_insert_grn_id |
2 | ha_mroonga.so | function |
| mroonga_snippet
|
0 | ha_mroonga.so | function |
| mroonga_command
|
0 | ha_mroonga.so | function |
| mroonga_escape
|
0 | ha_mroonga.so | function |
+--------------------+-----+---------------+----------+
4 rows in set (0.00 sec)
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 47

今回の演習の題材
駅データ.jp
http://www.ekidata.jp/
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 48

題材のダウンロード
⏳以下から今回使うサンプルをダウンロードしてくだ
さい
http://packages.groonga.org/tmp/groonga-meetup-20140429.tar.gz
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 49

Groonga編
よく使うgroongaコマンド
table_create/table_remove
column_create/column_remove
select/load/delete/dump
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 50

テーブルのキーの話
いろいろあるけどTABLE_PAT_KEY
長過ぎるキーは禁物(ShortText)
table_create Company TABLE_PAT_KEY UInt32
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 51

データを追加/更新しよう
多才なloadコマンド
追加も更新もこれ一つで
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 52

失敗時にわかりやすいロード
の仕方(1)
こうやってロードできるけど
load --table Company
[
["_key", "column1", "column2", ...
["key1", "data1", "data2", ...
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 53

失敗時にわかりやすいロード
の仕方(2)
key:valueのペアがわかりやすい
load --table Company
[
{"_key": "key1", "column1":"data1", "column2":", ...
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 54

失敗時にわかりやすいロード
の仕方(3)
⏳実際に試してみましょう
% 0001-load/load-fail.sh
% 0001-load/load-succeed.sh
[[0,1398668413.7959,0.00316190719604492],3]
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 55

データをより安全にロードす
る(3)
⏳実際に試してみましょう
⚠_key:3のstatusが抜けている
% ./0001-load/load-fail.sh
% ./0001-load/load-succeed.sh
[[0,1398668413.7959,0.00316190719604492],3]
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 56

データを更新してみよう
⏳実際に試してみましょう
_key:3のstatusを更新します
% ./0002-update/update-status.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 57

データを検索してみよう
⏳実際に試してみましょう
⚠1件もヒットしない
% ./0003-search/search-name.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 58

検索するにはインデックスが
必要(1)
⏳インデックスを追加してみまし
ょう
% ./0003-search/add-index.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 59

検索するにはインデックスが
必要(2)
⏳COLUMN_INDEXを指定するのがポ
イントです
table_remove Lexicon
table_create Lexicon TABLE_PAT_KEY ShortText --default_tokenizer \
TokenBigram --normalizer NormalizerAuto
column_create Lexicon name_index COLUMN_INDEX|WITH_SECTION|WITH_POSITION Users name
column_create Lexicon sect_index COLUMN_INDEX|WITH_SECTION|WITH_POSITION Users sect
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 60

検索するにはインデックスが
必要(3)
⏳再度検索してみましょう
% ./0003-search/search-name.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 61

検索するにはインデックスが
必要(4)
⏳インデックスを覗いてみる
% ./0003-search/dump-lexicon.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 62

データを削除してみよう(1)
⏳キーをもとに削除する
delete Company 2
% 0004-delete/delete-by-key.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 63

データを削除してみよう(2)
⏳nameカラムの値をもとに削除す
る
delete Company --filter "name == 'JR北海道'"
% 0004-delete/delete-by-name.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 64

データを削除してみよう(3)
⏳statusの値をもとに削除する
delete Company --filter 'status > 0'
% 0004-delete/delete-by-status.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 65

HTTP経由でのリクエストの基
本
コマンド名 + キー=値のペア
http://localhost:10041/d/コマンド名?キー1=値1&キー2=値2....
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 66

HTTP経由でテーブルを作成す
る(1)
⏳table_createコマンドを使って
アクセス
% ./0005-create-table/create-table.sh
curl 'http://localhost:10041/d/table_create?name=Company&type=TABLE_PAT_KEY&key_type=UInt32'
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 67

HTTP経由でカラムを作成する
(1)
⏳column_createコマンドを使って
アクセス
% ./0006-create-column/create-column.sh
curl 'http://localhost:10041/d/column_create?table=Company&name=full_name&flags=COLUMN_SCALAR&type=ShortText'
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 68

POSTでデータを更新する(1)
⏳POSTでデータをロードしてみま
しょう
% ./0007-post-data/post-data.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 69

HTTPでデータを検索する(1)
⏳HTTP経由で検索してみましょう
% ./0008-search-http/search-http.sh
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 70

管理画面を触ってみよう
⏳ブラウザで次のURLにアクセスし
てください
http://localhost:10041/
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 71

Mroonga
編

Page: 72

モードの違いをおさえる(1)
ラッパーモード
データは他のストレージエンジン
全文検索をMroongaでがんばる
トランザクションでロールバックすると不
整合発生
チューニングはMySQLの範囲で
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 73

モードの違いをおさえる(2)
ストレージモード
全部Mroongaでがんばる
トランザクション何それ?
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 74

ストレージモード
ENGINE=mroongaと覚えましょう
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 75

ラッパーモード
コメントでエンジンを指定
ENGINE=mroonga COMMENT='engine "innodb"'
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 76

パーサーの指定
コメントでパーサーを指定
Groongaの用語だとトークナイザ
ー
FULLTEXT INDEX (content) COMMENT 'parser "TokenMecab"'
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 77

ノーマライザーの指定
コメントでノーマライザーを指
定
FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"'
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 78

パーサー&ノーマライザーの
指定
両方指定したいときは,で区切る
FULLTEXT INDEX (content) COMMENT 'parser "TokenMecab", normalizer "NormalizerAuto"'
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 79

MATCH AGAINSTとBOOLEAN
MODE
QUERY EXPANSION MODE
MySQLにおまかせの類似文書検索
BOOLEAN MODE
明示的に検索を制御
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 80

位置情報検索
⏳Qiitaの位置情報検索の記事を試してみよう
http://qiita.com/groonga/items/7abca5004d2ae386d388
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 81

感謝
WEICさん
会場提供ありがとうございま
す!
Groonga meetup #2
Powered by Rabbit 2.1.2

Page: 82

おわり
Any Questions?
Groonga meetup #2
Powered by Rabbit 2.1.2

Other slides