狠狠撸

狠狠撸Share a Scribd company logo
Groonga meetup #2 Powered by Rabbit 2.1.2
Groonga
meetup #2
林健太郎 クリアコード
Groonga meetup
2014/04/29
Groonga meetup #2 Powered by Rabbit 2.1.2
はじめに
開催の目的
今回の内容
Any Questions?
Groonga meetup #2 Powered by Rabbit 2.1.2
開催の目的(1)
「全文検索をし
たい人の最初の
一歩を踏みだし
やすくしよう」
Groonga meetup #2 Powered by Rabbit 2.1.2
今回の内容(1)
全文検索事始め
GroongaやMroongaの特長の紹介
最新版の導入について
GroongaやMroongaの環境構築
Groonga meetup #2 Powered by Rabbit 2.1.2
今回の内容(2)
題材の説明と実際の演習(随時)
Any Questions?
Groonga meetup #2 Powered by Rabbit 2.1.2
全文検索事始め
既存のシステムに全文検索導入
したい
手持ちのメタ情報を効率良く検
索したい
Groonga meetup #2 Powered by Rabbit 2.1.2
Groongaの特長(1)
全文検索と即時更新
参照ロックフリー
更新しつつ検索OK
カラムストアを採用
集計クエリを高速に処理可能
Groonga meetup #2 Powered by Rabbit 2.1.2
Groongaの特長(2)
豊富なトークナイザー
検索漏れないことを重視しますか?
検索精度を重視しますか?
位置情報検索のサポート
Groonga meetup #2 Powered by Rabbit 2.1.2
Groongaの特長(3)
アプリケーションへの組込み
ライブラリとして活用可能
実はバックエンドでGroongaが動い
ていることも
Groonga meetup #2 Powered by Rabbit 2.1.2
Groongaとパッケージ
Debian
Ubuntu
CentOS
Fedora
Windows
Groonga meetup #2 Powered by Rabbit 2.1.2
Groonga on Debian
Debian 7.4 (wheezy)
Debian 8 (jessie)
Debian unstable (sid)
Groonga meetup #2 Powered by Rabbit 2.1.2
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
Groonga on Ubuntu(2)
Ubuntu 13.10 (Saucy)
7月にサポート終了
Ubuntu 14.04 (Trusty)
今月からサポート開始
Groonga meetup #2 Powered by Rabbit 2.1.2
Groonga on CentOS
CentOS 5/6
中国語のトークナイザーは未サポー
ト
CentOS 7?
まだrcベースらしいのでしばらく先
Groonga meetup #2 Powered by Rabbit 2.1.2
Groonga on Fedora(1)
Fedora 20
中国語のトークナイザーは未サポー
ト
Groonga公式とFedora公式に違いは
ない
Fedoraでリリースするのはちょっと
遅れる(2-3週)
Groonga meetup #2 Powered by Rabbit 2.1.2
Groonga on Fedora(2)
リリース短縮にはKarmaが必要
Groonga meetup #2 Powered by Rabbit 2.1.2
FedoraでKarmaを稼ぐ
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
https://admin.fedoraproject.org/updates/
Groonga meetup #2 Powered by Rabbit 2.1.2
FedoraでKarmaを稼ぐ(1)
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
https://admin.fedoraproject.org/updates/
Groonga meetup #2 Powered by Rabbit 2.1.2
FedoraでKarmaを稼ぐ(2)
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
Groonga meetup #2 Powered by Rabbit 2.1.2
FedoraでKarmaを稼ぐ(2)
Testingって?
Groonga meetup #2 Powered by Rabbit 2.1.2
FedoraでKarmaを稼ぐ(3)
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
Groonga meetup #2 Powered by Rabbit 2.1.2
FedoraでKarmaを稼ぐ(4)
Bohdiにログイン
メニューのTestingを選択
Groongaパッケージを選択
works for meコメントを追加
Groonga meetup #2 Powered by Rabbit 2.1.2
FedoraでKarmaを稼ぐ(4)
works for meコメントって?
これを送信するとKarma +1
Groonga meetup #2 Powered by Rabbit 2.1.2
Mroongaの特長(1)
導入しやすいプラグイン形式
他のストレージエンジンとの連
携
ラッパーモード
Groonga meetup #2 Powered by Rabbit 2.1.2
Mroongaの特長(2)
データ更新が多くても検索性能
が良い
LIKEからの置き換えも比較的容
易
Groonga meetup #2 Powered by Rabbit 2.1.2
Mroongaとパッケージ
Debian
Ubuntu
CentOS
Fedora
Windows
Groonga meetup #2 Powered by Rabbit 2.1.2
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
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
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
Mroonga on CentOS 5
CentOS 5
以前はMySQLが古すぎたので、
MySQL 5.6対応パッケージを提供
MySQL 5.5(SCL)対応パッケージに移
行
Groonga meetup #2 Powered by Rabbit 2.1.2
Mroonga on CentOS 6
CentOS 6
MySQL 5.1しか使えないというのは
古い情報です!
MySQL 5.5対応(SCL)パッケージに移
行
Groonga meetup #2 Powered by Rabbit 2.1.2
Mroonga on CentOS
CentOS 5やCentOS 6でMySQL 5.6
wingリポジトリをお勧めしています
http://wing-repo.net/
Groonga meetup #2 Powered by Rabbit 2.1.2
Mroonga on Fedora
Fedora 20
MySQL 5.5 & MariaDB 5.5対応
Fedora公式リポジトリでは未リリー
ス
Mroonga含めてインストールしたいなら
Groongaリポジトリを登録する
Groonga meetup #2 Powered by Rabbit 2.1.2
環境構築してみよう
Groongaのインストール
Mroongaのインストール
Groonga meetup #2 Powered by Rabbit 2.1.2
どれをインストールしたらいい?(1)
groonga
ちょっとお試しで使うならコレ
コマンドラインで使うだけ
いろいろ指定すればサーバーとして
も利用可
Groonga meetup #2 Powered by Rabbit 2.1.2
どれをインストールしたらいい?(2)
groonga-server-http
サーバー立てるならコレ
groonga-server-gqtp
特に理由がなければスルー
Groonga meetup #2 Powered by Rabbit 2.1.2
どれをインストールしたらいい?(3)
groonga-httpd
不満がでてきたらコレ
POSTしたいならコレ一択
Groonga meetup #2 Powered by Rabbit 2.1.2
どれをインストールしたらいい?(3)
groonga-httpd
不満がでてきたらコレ
POSTしたいならコレ一択
Groonga meetup #2 Powered by Rabbit 2.1.2
Install Groonga(1)
?Groongaをインストールしてみましょう
groonga-httpd
http://groonga.org/ja/docs/install.html
Groonga meetup #2 Powered by Rabbit 2.1.2
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
Install Groonga(3)
?Groongaが起動しているか確認しましょう
% curl http://localhost:10041/d/status
Groonga meetup #2 Powered by Rabbit 2.1.2
Install Groonga(4)
?Groongaが起動していない場合は起動しましょう
% sudo service groonga-httpd start
Groonga meetup #2 Powered by Rabbit 2.1.2
Install Mroonga(1)
?Mroongaをインストールしてみましょう
http://mroonga.org/ja/docs/install.html
Groonga meetup #2 Powered by Rabbit 2.1.2
Install Mroonga(2)
?Mroongaが使えるか確認しましょう
mysql> show engines;
Groonga meetup #2 Powered by Rabbit 2.1.2
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
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
今回の演習の題材
駅データ.jp
http://www.ekidata.jp/
Groonga meetup #2 Powered by Rabbit 2.1.2
題材のダウンロード
?以下から今回使うサンプルをダウンロードしてくだ
さい
http://packages.groonga.org/tmp/groonga-meetup-20140429.tar.gz
Groonga meetup #2 Powered by Rabbit 2.1.2
Groonga編
よく使うgroongaコマンド
table_create/table_remove
column_create/column_remove
select/load/delete/dump
Groonga meetup #2 Powered by Rabbit 2.1.2
テーブルのキーの話
いろいろあるけどTABLE_PAT_KEY
長過ぎるキーは禁物(ShortText)
table_create Company TABLE_PAT_KEY UInt32
Groonga meetup #2 Powered by Rabbit 2.1.2
データを追加/更新しよう
多才なloadコマンド
追加も更新もこれ一つで
Groonga meetup #2 Powered by Rabbit 2.1.2
失敗時にわかりやすいロード
の仕方(1)
こうやってロードできるけど
load --table Company
[
["_key", "column1", "column2", ...
["key1", "data1", "data2", ...
Groonga meetup #2 Powered by Rabbit 2.1.2
失敗時にわかりやすいロード
の仕方(2)
key:valueのペアがわかりやすい
load --table Company
[
{"_key": "key1", "column1":"data1", "column2":", ...
Groonga meetup #2 Powered by Rabbit 2.1.2
失敗時にわかりやすいロード
の仕方(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
データをより安全にロードす
る(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
データを更新してみよう
?実際に試してみましょう
_key:3のstatusを更新します
% ./0002-update/update-status.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
データを検索してみよう
?実際に試してみましょう
?1件もヒットしない
% ./0003-search/search-name.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
検索するにはインデックスが
必要(1)
?インデックスを追加してみまし
ょう
% ./0003-search/add-index.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
検索するにはインデックスが
必要(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
検索するにはインデックスが
必要(3)
?再度検索してみましょう
% ./0003-search/search-name.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
検索するにはインデックスが
必要(4)
?インデックスを覗いてみる
% ./0003-search/dump-lexicon.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
データを削除してみよう(1)
?キーをもとに削除する
delete Company 2
% 0004-delete/delete-by-key.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
データを削除してみよう(2)
?nameカラムの値をもとに削除す
る
delete Company --filter "name == 'JR北海道'"
% 0004-delete/delete-by-name.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
データを削除してみよう(3)
?statusの値をもとに削除する
delete Company --filter 'status > 0'
% 0004-delete/delete-by-status.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
HTTP経由でのリクエストの基
本
コマンド名 + キー=値のペア
http://localhost:10041/d/コマンド名?キー1=値1&キー2=値2....
Groonga meetup #2 Powered by Rabbit 2.1.2
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
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
POSTでデータを更新する(1)
?POSTでデータをロードしてみま
しょう
% ./0007-post-data/post-data.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
HTTPでデータを検索する(1)
?HTTP経由で検索してみましょう
% ./0008-search-http/search-http.sh
Groonga meetup #2 Powered by Rabbit 2.1.2
管理画面を触ってみよう
?ブラウザで次のURLにアクセスし
てください
http://localhost:10041/
Mroonga
編
Groonga meetup #2 Powered by Rabbit 2.1.2
モードの違いをおさえる(1)
ラッパーモード
データは他のストレージエンジン
全文検索をMroongaでがんばる
トランザクションでロールバックすると不
整合発生
チューニングはMySQLの範囲で
Groonga meetup #2 Powered by Rabbit 2.1.2
モードの違いをおさえる(2)
ストレージモード
全部Mroongaでがんばる
トランザクション何それ?
Groonga meetup #2 Powered by Rabbit 2.1.2
ストレージモード
ENGINE=mroongaと覚えましょう
Groonga meetup #2 Powered by Rabbit 2.1.2
ラッパーモード
コメントでエンジンを指定
ENGINE=mroonga COMMENT='engine "innodb"'
Groonga meetup #2 Powered by Rabbit 2.1.2
パーサーの指定
コメントでパーサーを指定
Groongaの用語だとトークナイザ
ー
FULLTEXT INDEX (content) COMMENT 'parser "TokenMecab"'
Groonga meetup #2 Powered by Rabbit 2.1.2
ノーマライザーの指定
コメントでノーマライザーを指
定
FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"'
Groonga meetup #2 Powered by Rabbit 2.1.2
パーサー&ノーマライザーの
指定
両方指定したいときは,で区切る
FULLTEXT INDEX (content) COMMENT 'parser "TokenMecab", normalizer "NormalizerAuto"'
Groonga meetup #2 Powered by Rabbit 2.1.2
MATCH AGAINSTとBOOLEAN
MODE
QUERY EXPANSION MODE
MySQLにおまかせの類似文書検索
BOOLEAN MODE
明示的に検索を制御
Groonga meetup #2 Powered by Rabbit 2.1.2
位置情報検索
?Qiitaの位置情報検索の記事を試してみよう
http://qiita.com/groonga/items/7abca5004d2ae386d388
Groonga meetup #2 Powered by Rabbit 2.1.2
感謝
WEICさん
会場提供ありがとうございま
す!
Groonga meetup #2 Powered by Rabbit 2.1.2
おわり
Any Questions?

More Related Content

What's hot (19)

PDF
罢谤别尘补で试す贵颈谤别飞补濒濒
M Hagiwara
?
PDF
顿谤辞辞苍驳补移行后の世界
Kouhei Sutou
?
PDF
2019 jetson azure_hands-on
Aya Owosekun
?
PDF
狈辞诲别.箩蝉惫0.8から惫4.虫へのバージョンアップ ~大规模笔耻蝉丑通知基盘の运用事例~
Recruit Technologies
?
PPTX
Introduction to Ostinato , network packet crafting and generator.
Kentaro Ebisawa
?
PDF
ダークネットのはなし #ssmjp
sonickun
?
PDF
搁耻产测のエンコーディング
Masahiro Tomita
?
PDF
本当はこわいエンコーディングの话
Masahiro Tomita
?
PPTX
Windows Server+Photon Server環境でも Fluentd+Elasticsearch+Kibanaを活用して 各種情報を可視化する...
GMO GlobalSign Holdings K.K.
?
PDF
Prometheus at Preferred Networks
Preferred Networks
?
PDF
20131230_CloudStack Advent Calendar VPCを作ってみよう
Midori Oge
?
PDF
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
Naoto Gohko
?
PDF
Bug for Install Linux on Atom Z8700 Portabook ポータブックのLinuxインストールバグ対策 2018 #東海道らぐ
Netwalker lab kapper
?
PPTX
plotnetcfg入門 | Introduction to plotnetcfg
Kentaro Ebisawa
?
PDF
ゆるふわLinux-HA ?PostgreSQL編?
Taro Matsuzawa
?
PPTX
Webrtc bootcamp handson
mganeko
?
PDF
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
kazuhcurry
?
PDF
Grafana Dashboards as Code
Takuhiro Yoshida
?
PDF
贰苍谤辞辞迟と笔测虫颈蝉で快适コンテナ生活
Kuninobu SaSaki
?
罢谤别尘补で试す贵颈谤别飞补濒濒
M Hagiwara
?
顿谤辞辞苍驳补移行后の世界
Kouhei Sutou
?
2019 jetson azure_hands-on
Aya Owosekun
?
狈辞诲别.箩蝉惫0.8から惫4.虫へのバージョンアップ ~大规模笔耻蝉丑通知基盘の运用事例~
Recruit Technologies
?
Introduction to Ostinato , network packet crafting and generator.
Kentaro Ebisawa
?
ダークネットのはなし #ssmjp
sonickun
?
搁耻产测のエンコーディング
Masahiro Tomita
?
本当はこわいエンコーディングの话
Masahiro Tomita
?
Windows Server+Photon Server環境でも Fluentd+Elasticsearch+Kibanaを活用して 各種情報を可視化する...
GMO GlobalSign Holdings K.K.
?
Prometheus at Preferred Networks
Preferred Networks
?
20131230_CloudStack Advent Calendar VPCを作ってみよう
Midori Oge
?
2015 0807 ConoHa I am the bone of the OpenStack API CLI tool
Naoto Gohko
?
Bug for Install Linux on Atom Z8700 Portabook ポータブックのLinuxインストールバグ対策 2018 #東海道らぐ
Netwalker lab kapper
?
plotnetcfg入門 | Introduction to plotnetcfg
Kentaro Ebisawa
?
ゆるふわLinux-HA ?PostgreSQL編?
Taro Matsuzawa
?
Webrtc bootcamp handson
mganeko
?
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
kazuhcurry
?
Grafana Dashboards as Code
Takuhiro Yoshida
?
贰苍谤辞辞迟と笔测虫颈蝉で快适コンテナ生活
Kuninobu SaSaki
?

Similar to Groonga Meetup 2014/04/29 (20)

PDF
Mroonga Meetup 2014/06/29
kenhys
?
PDF
骋谤辞辞苍驳补族2014
Kouhei Sutou
?
PDF
骋谤辞辞苍驳补で搁别诲尘颈苍别を高速全文検索
Kouhei Sutou
?
PDF
惭谤辞辞苍驳补?笔骋谤辞辞苍驳补导入方法
Kouhei Sutou
?
PDF
初心者向け惭谤辞辞苍驳补?笔骋谤辞辞苍驳补情报
Kouhei Sutou
?
PDF
骋谤辞辞苍驳补を支える取り组み
kenhys
?
PDF
骋谤辞辞苍驳补族2013
Kouhei Sutou
?
PDF
Mroonga de fts
yoku0825
?
PDF
骋谤辞辞苍驳补の特徴
Kouhei Sutou
?
PDF
顿谤辞辞苍驳补のはじめかた
Kouhei Sutou
?
PDF
Droonga as-groonga-with-replication-droonga-as-groonga-with-replication
Hiroshi Yuki
?
PDF
Droonga - 分散Groongaで快適レプリケーション生活
Hiroshi Yuki
?
PPTX
20140903驳谤辞辞苍驳补発表资料
Hironobu Saitoh
?
PDF
惭谤辞辞苍驳补と笔骋谤辞辞苍驳补
Kouhei Sutou
?
PDF
惭谤辞辞苍驳补开発者が来たぞ!
Kouhei Sutou
?
PDF
骋谤辞辞苍驳补の绍介と事例绍介
Naoya Murakami
?
PDF
惭测厂蚕尝?笔辞蝉迟驳谤别厂蚕尝上で动かす全文検索エンジン「骋谤辞辞苍驳补」セミナー
Kouhei Sutou
?
PDF
骋谤辞辞苍驳补の今后への期待
Naoya Murakami
?
PDF
Mroonga 20121129
Kentoku
?
PDF
Mroonga unsupported feature_20111129
Kentoku
?
Mroonga Meetup 2014/06/29
kenhys
?
骋谤辞辞苍驳补族2014
Kouhei Sutou
?
骋谤辞辞苍驳补で搁别诲尘颈苍别を高速全文検索
Kouhei Sutou
?
惭谤辞辞苍驳补?笔骋谤辞辞苍驳补导入方法
Kouhei Sutou
?
初心者向け惭谤辞辞苍驳补?笔骋谤辞辞苍驳补情报
Kouhei Sutou
?
骋谤辞辞苍驳补を支える取り组み
kenhys
?
骋谤辞辞苍驳补族2013
Kouhei Sutou
?
Mroonga de fts
yoku0825
?
骋谤辞辞苍驳补の特徴
Kouhei Sutou
?
顿谤辞辞苍驳补のはじめかた
Kouhei Sutou
?
Droonga as-groonga-with-replication-droonga-as-groonga-with-replication
Hiroshi Yuki
?
Droonga - 分散Groongaで快適レプリケーション生活
Hiroshi Yuki
?
20140903驳谤辞辞苍驳补発表资料
Hironobu Saitoh
?
惭谤辞辞苍驳补と笔骋谤辞辞苍驳补
Kouhei Sutou
?
惭谤辞辞苍驳补开発者が来たぞ!
Kouhei Sutou
?
骋谤辞辞苍驳补の绍介と事例绍介
Naoya Murakami
?
惭测厂蚕尝?笔辞蝉迟驳谤别厂蚕尝上で动かす全文検索エンジン「骋谤辞辞苍驳补」セミナー
Kouhei Sutou
?
骋谤辞辞苍驳补の今后への期待
Naoya Murakami
?
Mroonga 20121129
Kentoku
?
Mroonga unsupported feature_20111129
Kentoku
?
Ad

More from kenhys (7)

PDF
How to use SOAP interface of debbugs #tokyodebian
kenhys
?
PDF
顿别产颈补苍で贵颈谤别蹿辞虫をカスタマイズするには
kenhys
?
PDF
诲别产别虫辫辞(尘别苍迟辞谤蝉.诲.苍)をハックするには
kenhys
?
PDF
顿别产颈补苍のインフラを借りるには
kenhys
?
PDF
顿别产颈补苍と贵别诲辞谤补でパッケージをリリースするまでの话
kenhys
?
PDF
# groonga開発チームの紹介
kenhys
?
PDF
Shibuyalisp6lt
kenhys
?
How to use SOAP interface of debbugs #tokyodebian
kenhys
?
顿别产颈补苍で贵颈谤别蹿辞虫をカスタマイズするには
kenhys
?
诲别产别虫辫辞(尘别苍迟辞谤蝉.诲.苍)をハックするには
kenhys
?
顿别产颈补苍のインフラを借りるには
kenhys
?
顿别产颈补苍と贵别诲辞谤补でパッケージをリリースするまでの话
kenhys
?
# groonga開発チームの紹介
kenhys
?
Shibuyalisp6lt
kenhys
?
Ad

Groonga Meetup 2014/04/29

  • 1. Groonga meetup #2 Powered by Rabbit 2.1.2 Groonga meetup #2 林健太郎 クリアコード Groonga meetup 2014/04/29
  • 2. Groonga meetup #2 Powered by Rabbit 2.1.2 はじめに 開催の目的 今回の内容 Any Questions?
  • 3. Groonga meetup #2 Powered by Rabbit 2.1.2 開催の目的(1) 「全文検索をし たい人の最初の 一歩を踏みだし やすくしよう」
  • 4. Groonga meetup #2 Powered by Rabbit 2.1.2 今回の内容(1) 全文検索事始め GroongaやMroongaの特長の紹介 最新版の導入について GroongaやMroongaの環境構築
  • 5. Groonga meetup #2 Powered by Rabbit 2.1.2 今回の内容(2) 題材の説明と実際の演習(随時) Any Questions?
  • 6. Groonga meetup #2 Powered by Rabbit 2.1.2 全文検索事始め 既存のシステムに全文検索導入 したい 手持ちのメタ情報を効率良く検 索したい
  • 7. Groonga meetup #2 Powered by Rabbit 2.1.2 Groongaの特長(1) 全文検索と即時更新 参照ロックフリー 更新しつつ検索OK カラムストアを採用 集計クエリを高速に処理可能
  • 8. Groonga meetup #2 Powered by Rabbit 2.1.2 Groongaの特長(2) 豊富なトークナイザー 検索漏れないことを重視しますか? 検索精度を重視しますか? 位置情報検索のサポート
  • 9. Groonga meetup #2 Powered by Rabbit 2.1.2 Groongaの特長(3) アプリケーションへの組込み ライブラリとして活用可能 実はバックエンドでGroongaが動い ていることも
  • 10. Groonga meetup #2 Powered by Rabbit 2.1.2 Groongaとパッケージ Debian Ubuntu CentOS Fedora Windows
  • 11. Groonga meetup #2 Powered by Rabbit 2.1.2 Groonga on Debian Debian 7.4 (wheezy) Debian 8 (jessie) Debian unstable (sid)
  • 12. Groonga meetup #2 Powered by Rabbit 2.1.2 Groonga on Ubuntu(1) Ubuntu 12.04 (Precise) Ubuntu 12.10 (Quantal) 明日でサポート終了 4.0.1まで Ubuntu 13.04 (Raring) すでにサポート終了 3.1.2まで
  • 13. Groonga meetup #2 Powered by Rabbit 2.1.2 Groonga on Ubuntu(2) Ubuntu 13.10 (Saucy) 7月にサポート終了 Ubuntu 14.04 (Trusty) 今月からサポート開始
  • 14. Groonga meetup #2 Powered by Rabbit 2.1.2 Groonga on CentOS CentOS 5/6 中国語のトークナイザーは未サポー ト CentOS 7? まだrcベースらしいのでしばらく先
  • 15. Groonga meetup #2 Powered by Rabbit 2.1.2 Groonga on Fedora(1) Fedora 20 中国語のトークナイザーは未サポー ト Groonga公式とFedora公式に違いは ない Fedoraでリリースするのはちょっと 遅れる(2-3週)
  • 16. Groonga meetup #2 Powered by Rabbit 2.1.2 Groonga on Fedora(2) リリース短縮にはKarmaが必要
  • 17. Groonga meetup #2 Powered by Rabbit 2.1.2 FedoraでKarmaを稼ぐ Bohdiにログイン メニューのTestingを選択 Groongaパッケージを選択 works for meコメントを追加 https://admin.fedoraproject.org/updates/
  • 18. Groonga meetup #2 Powered by Rabbit 2.1.2 FedoraでKarmaを稼ぐ(1) Bohdiにログイン メニューのTestingを選択 Groongaパッケージを選択 works for meコメントを追加 https://admin.fedoraproject.org/updates/
  • 19. Groonga meetup #2 Powered by Rabbit 2.1.2 FedoraでKarmaを稼ぐ(2) Bohdiにログイン メニューのTestingを選択 Groongaパッケージを選択 works for meコメントを追加
  • 20. Groonga meetup #2 Powered by Rabbit 2.1.2 FedoraでKarmaを稼ぐ(2) Testingって?
  • 21. Groonga meetup #2 Powered by Rabbit 2.1.2 FedoraでKarmaを稼ぐ(3) Bohdiにログイン メニューのTestingを選択 Groongaパッケージを選択 works for meコメントを追加
  • 22. Groonga meetup #2 Powered by Rabbit 2.1.2 FedoraでKarmaを稼ぐ(4) Bohdiにログイン メニューのTestingを選択 Groongaパッケージを選択 works for meコメントを追加
  • 23. Groonga meetup #2 Powered by Rabbit 2.1.2 FedoraでKarmaを稼ぐ(4) works for meコメントって? これを送信するとKarma +1
  • 24. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroongaの特長(1) 導入しやすいプラグイン形式 他のストレージエンジンとの連 携 ラッパーモード
  • 25. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroongaの特長(2) データ更新が多くても検索性能 が良い LIKEからの置き換えも比較的容 易
  • 26. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroongaとパッケージ Debian Ubuntu CentOS Fedora Windows
  • 27. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroonga on Debian MySQL 5.5系 Debian 7.4 (wheezy) Debian 8 (jessie) Debian unstable (sid)
  • 28. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroonga on Ubuntu(1) MySQL 5.5系 Ubuntu 12.04 (Precise) Ubuntu 12.10 (Quantal) 明日でサポート終了 4.01まで Ubuntu 13.04 (Raring) すでにサポート終了 3.12まで
  • 29. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroonga on Ubuntu(2) MySQL 5.5系 Ubuntu 13.10 (Saucy) 7月にサポート終了 Ubuntu 14.04 (Trusty) 今月からサポート開始
  • 30. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroonga on CentOS 5 CentOS 5 以前はMySQLが古すぎたので、 MySQL 5.6対応パッケージを提供 MySQL 5.5(SCL)対応パッケージに移 行
  • 31. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroonga on CentOS 6 CentOS 6 MySQL 5.1しか使えないというのは 古い情報です! MySQL 5.5対応(SCL)パッケージに移 行
  • 32. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroonga on CentOS CentOS 5やCentOS 6でMySQL 5.6 wingリポジトリをお勧めしています http://wing-repo.net/
  • 33. Groonga meetup #2 Powered by Rabbit 2.1.2 Mroonga on Fedora Fedora 20 MySQL 5.5 & MariaDB 5.5対応 Fedora公式リポジトリでは未リリー ス Mroonga含めてインストールしたいなら Groongaリポジトリを登録する
  • 34. Groonga meetup #2 Powered by Rabbit 2.1.2 環境構築してみよう Groongaのインストール Mroongaのインストール
  • 35. Groonga meetup #2 Powered by Rabbit 2.1.2 どれをインストールしたらいい?(1) groonga ちょっとお試しで使うならコレ コマンドラインで使うだけ いろいろ指定すればサーバーとして も利用可
  • 36. Groonga meetup #2 Powered by Rabbit 2.1.2 どれをインストールしたらいい?(2) groonga-server-http サーバー立てるならコレ groonga-server-gqtp 特に理由がなければスルー
  • 37. Groonga meetup #2 Powered by Rabbit 2.1.2 どれをインストールしたらいい?(3) groonga-httpd 不満がでてきたらコレ POSTしたいならコレ一択
  • 38. Groonga meetup #2 Powered by Rabbit 2.1.2 どれをインストールしたらいい?(3) groonga-httpd 不満がでてきたらコレ POSTしたいならコレ一択
  • 39. Groonga meetup #2 Powered by Rabbit 2.1.2 Install Groonga(1) ?Groongaをインストールしてみましょう groonga-httpd http://groonga.org/ja/docs/install.html
  • 40. Groonga meetup #2 Powered by Rabbit 2.1.2 Install Groonga(2) ?トークナイザーやノーマライザーをインストールし てみましょう groonga-tokenizer-mecab groonga-normalizer-mysql http://groonga.org/ja/docs/install.html
  • 41. Groonga meetup #2 Powered by Rabbit 2.1.2 Install Groonga(3) ?Groongaが起動しているか確認しましょう % curl http://localhost:10041/d/status
  • 42. Groonga meetup #2 Powered by Rabbit 2.1.2 Install Groonga(4) ?Groongaが起動していない場合は起動しましょう % sudo service groonga-httpd start
  • 43. Groonga meetup #2 Powered by Rabbit 2.1.2 Install Mroonga(1) ?Mroongaをインストールしてみましょう http://mroonga.org/ja/docs/install.html
  • 44. Groonga meetup #2 Powered by Rabbit 2.1.2 Install Mroonga(2) ?Mroongaが使えるか確認しましょう mysql> show engines;
  • 45. Groonga meetup #2 Powered by Rabbit 2.1.2 Install Mroonga(3) ?インストールされているとどうなる? mysql> SELECT * FROM mysql.plugin; +---------+---------------+ | name | dl | +---------+---------------+ | mroonga | ha_mroonga.so | +---------+---------------+ 1 row in set (0.00 sec)
  • 46. Groonga meetup #2 Powered by Rabbit 2.1.2 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)
  • 47. Groonga meetup #2 Powered by Rabbit 2.1.2 今回の演習の題材 駅データ.jp http://www.ekidata.jp/
  • 48. Groonga meetup #2 Powered by Rabbit 2.1.2 題材のダウンロード ?以下から今回使うサンプルをダウンロードしてくだ さい http://packages.groonga.org/tmp/groonga-meetup-20140429.tar.gz
  • 49. Groonga meetup #2 Powered by Rabbit 2.1.2 Groonga編 よく使うgroongaコマンド table_create/table_remove column_create/column_remove select/load/delete/dump
  • 50. Groonga meetup #2 Powered by Rabbit 2.1.2 テーブルのキーの話 いろいろあるけどTABLE_PAT_KEY 長過ぎるキーは禁物(ShortText) table_create Company TABLE_PAT_KEY UInt32
  • 51. Groonga meetup #2 Powered by Rabbit 2.1.2 データを追加/更新しよう 多才なloadコマンド 追加も更新もこれ一つで
  • 52. Groonga meetup #2 Powered by Rabbit 2.1.2 失敗時にわかりやすいロード の仕方(1) こうやってロードできるけど load --table Company [ ["_key", "column1", "column2", ... ["key1", "data1", "data2", ...
  • 53. Groonga meetup #2 Powered by Rabbit 2.1.2 失敗時にわかりやすいロード の仕方(2) key:valueのペアがわかりやすい load --table Company [ {"_key": "key1", "column1":"data1", "column2":", ...
  • 54. Groonga meetup #2 Powered by Rabbit 2.1.2 失敗時にわかりやすいロード の仕方(3) ?実際に試してみましょう % 0001-load/load-fail.sh % 0001-load/load-succeed.sh [[0,1398668413.7959,0.00316190719604492],3]
  • 55. Groonga meetup #2 Powered by Rabbit 2.1.2 データをより安全にロードす る(3) ?実際に試してみましょう ?_key:3のstatusが抜けている % ./0001-load/load-fail.sh % ./0001-load/load-succeed.sh [[0,1398668413.7959,0.00316190719604492],3]
  • 56. Groonga meetup #2 Powered by Rabbit 2.1.2 データを更新してみよう ?実際に試してみましょう _key:3のstatusを更新します % ./0002-update/update-status.sh
  • 57. Groonga meetup #2 Powered by Rabbit 2.1.2 データを検索してみよう ?実際に試してみましょう ?1件もヒットしない % ./0003-search/search-name.sh
  • 58. Groonga meetup #2 Powered by Rabbit 2.1.2 検索するにはインデックスが 必要(1) ?インデックスを追加してみまし ょう % ./0003-search/add-index.sh
  • 59. Groonga meetup #2 Powered by Rabbit 2.1.2 検索するにはインデックスが 必要(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
  • 60. Groonga meetup #2 Powered by Rabbit 2.1.2 検索するにはインデックスが 必要(3) ?再度検索してみましょう % ./0003-search/search-name.sh
  • 61. Groonga meetup #2 Powered by Rabbit 2.1.2 検索するにはインデックスが 必要(4) ?インデックスを覗いてみる % ./0003-search/dump-lexicon.sh
  • 62. Groonga meetup #2 Powered by Rabbit 2.1.2 データを削除してみよう(1) ?キーをもとに削除する delete Company 2 % 0004-delete/delete-by-key.sh
  • 63. Groonga meetup #2 Powered by Rabbit 2.1.2 データを削除してみよう(2) ?nameカラムの値をもとに削除す る delete Company --filter "name == 'JR北海道'" % 0004-delete/delete-by-name.sh
  • 64. Groonga meetup #2 Powered by Rabbit 2.1.2 データを削除してみよう(3) ?statusの値をもとに削除する delete Company --filter 'status > 0' % 0004-delete/delete-by-status.sh
  • 65. Groonga meetup #2 Powered by Rabbit 2.1.2 HTTP経由でのリクエストの基 本 コマンド名 + キー=値のペア http://localhost:10041/d/コマンド名?キー1=値1&キー2=値2....
  • 66. Groonga meetup #2 Powered by Rabbit 2.1.2 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'
  • 67. Groonga meetup #2 Powered by Rabbit 2.1.2 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'
  • 68. Groonga meetup #2 Powered by Rabbit 2.1.2 POSTでデータを更新する(1) ?POSTでデータをロードしてみま しょう % ./0007-post-data/post-data.sh
  • 69. Groonga meetup #2 Powered by Rabbit 2.1.2 HTTPでデータを検索する(1) ?HTTP経由で検索してみましょう % ./0008-search-http/search-http.sh
  • 70. Groonga meetup #2 Powered by Rabbit 2.1.2 管理画面を触ってみよう ?ブラウザで次のURLにアクセスし てください http://localhost:10041/
  • 72. Groonga meetup #2 Powered by Rabbit 2.1.2 モードの違いをおさえる(1) ラッパーモード データは他のストレージエンジン 全文検索をMroongaでがんばる トランザクションでロールバックすると不 整合発生 チューニングはMySQLの範囲で
  • 73. Groonga meetup #2 Powered by Rabbit 2.1.2 モードの違いをおさえる(2) ストレージモード 全部Mroongaでがんばる トランザクション何それ?
  • 74. Groonga meetup #2 Powered by Rabbit 2.1.2 ストレージモード ENGINE=mroongaと覚えましょう
  • 75. Groonga meetup #2 Powered by Rabbit 2.1.2 ラッパーモード コメントでエンジンを指定 ENGINE=mroonga COMMENT='engine "innodb"'
  • 76. Groonga meetup #2 Powered by Rabbit 2.1.2 パーサーの指定 コメントでパーサーを指定 Groongaの用語だとトークナイザ ー FULLTEXT INDEX (content) COMMENT 'parser "TokenMecab"'
  • 77. Groonga meetup #2 Powered by Rabbit 2.1.2 ノーマライザーの指定 コメントでノーマライザーを指 定 FULLTEXT INDEX (content) COMMENT 'normalizer "NormalizerAuto"'
  • 78. Groonga meetup #2 Powered by Rabbit 2.1.2 パーサー&ノーマライザーの 指定 両方指定したいときは,で区切る FULLTEXT INDEX (content) COMMENT 'parser "TokenMecab", normalizer "NormalizerAuto"'
  • 79. Groonga meetup #2 Powered by Rabbit 2.1.2 MATCH AGAINSTとBOOLEAN MODE QUERY EXPANSION MODE MySQLにおまかせの類似文書検索 BOOLEAN MODE 明示的に検索を制御
  • 80. Groonga meetup #2 Powered by Rabbit 2.1.2 位置情報検索 ?Qiitaの位置情報検索の記事を試してみよう http://qiita.com/groonga/items/7abca5004d2ae386d388
  • 81. Groonga meetup #2 Powered by Rabbit 2.1.2 感謝 WEICさん 会場提供ありがとうございま す!
  • 82. Groonga meetup #2 Powered by Rabbit 2.1.2 おわり Any Questions?