Droongaの はじめかた Powered by Rabbit 2.1.2
Droongaの
はじめかた
須藤功平 クリアコード
全文検索エンジンGroonga勉強会@札幌 2014/03/29
2014/03/29
Droongaの はじめかた Powered by Rabbit 2.1.2
この勉強会とこの話の関連
勉強会
Groongaの利用事例を募集
この話
Groongaを使ったプロダクト
Droongaの話
Droongaの はじめかた Powered by Rabbit 2.1.2
お知らせ1
4.0.1リリース!
Droongaの はじめかた Powered by Rabbit 2.1.2
4.0.1の新機能1
adjuster
スコアブースト機能
使用例: 運営のオススメを上に表示
重み付きベクター
レコード毎にn個の重みを設定
adjusterと連携するとよい
Droongaの はじめかた Powered by Rabbit 2.1.2
4.0.1の新機能2
データベース肥大化抑制
Milkodeユーザーにも効果大なはず
注意: データベースの再作成が必要
データベースの後方互換性あり
Droongaの はじめかた Powered by Rabbit 2.1.2
お知らせ2
1.0.1リリース!
Droongaの はじめかた Powered by Rabbit 2.1.2
1.0.1の新機能
adjuster対応
重み付きベクター対応
ユーザー視点の使い勝手向上
grn2drn-schema, droonga-
send, ...
今月は開発者としてよりもユーザーとして触っていたから
Droongaの はじめかた Powered by Rabbit 2.1.2
今日の目標
1人以上
Droongaデビュー
Droongaの はじめかた Powered by Rabbit 2.1.2
話すこと
Droonga
未経験者向け
ヒント
Droongaの はじめかた Powered by Rabbit 2.1.2
流れ
Droongaとはなにか
Groongaの使い方
↑とDroongaの使い方の違い
Droongaの考え方のイメージ
Droongaの はじめかた Powered by Rabbit 2.1.2
Droongaとはなにか
Distributed Groonga
Droongaの はじめかた Powered by Rabbit 2.1.2
Distributed?
スケールアウト
可能
Droongaの はじめかた Powered by Rabbit 2.1.2
Droonga
スケールアウト
可能な
Groonga
Droongaの はじめかた Powered by Rabbit 2.1.2
Groongaが透けて見える
スケールアウト
可能な
Groonga
Droongaの はじめかた Powered by Rabbit 2.1.2
GroongaとDroonga
一部はGroonga != Droonga
一部はGroonga == Droonga
Droongaの はじめかた Powered by Rabbit 2.1.2
Groonga != Droonga
APIは違う
DroongaにGroonga互換レイヤーあり
構成は違う
1台でDroongaを使っても嬉しくない
性能特性は違う
1台で捌ける量→Groongaの方が速い
Droongaの はじめかた Powered by Rabbit 2.1.2
Groonga == Droonga
クエリーの書き方は同じ
スキーマの考え方は同じ
検索機能はだいたい同じ
Droongaの はじめかた Powered by Rabbit 2.1.2
Droongaをはじめるために
教養として
Groongaを
押さえて
おくべき!
Droongaの はじめかた Powered by Rabbit 2.1.2
Groongaの使い方
Droongaとはなにか
Groongaの使い方
↑とDroongaの使い方の違い
Droongaの考え方のイメージ
Droongaの はじめかた Powered by Rabbit 2.1.2
なぜまずGroongaか
Groongaはお手軽
1台のマシンで動く
設定ファイルなしで動く
コマンドラインで動く
Droongaの はじめかた Powered by Rabbit 2.1.2
Groongaを使う流れ
初心者向けの簡易版
スキーマを作る1.
インデックスを作る2.
データを入れる3.
検索する4.
Droongaの はじめかた Powered by Rabbit 2.1.2
スキーマを作る
検索したいものを1つ決める
例: たいやき屋検索ならたいやき屋
検索したいものの集まりを
テーブルにする
例: TaiyakiShopsテーブル
付加情報をカラムにする
例: 店舗名、場所、メニューなど
Droongaの はじめかた Powered by Rabbit 2.1.2
スキーマ例
table_create TaiyakiShops 
TABLE_HASH_KEY ShortText
# 店舗名
column_create TaiyakiShops name 
COLUMN_SCALAR ShortText
# 場所
column_create TaiyakiShops location 
COLUMN_SCALAR WGS84GeoPoint
Droongaの はじめかた Powered by Rabbit 2.1.2
Groongaを使う流れ: 2
スキーマを作る1.
インデックスを作る2.
データを入れる3.
検索する4.
Droongaの はじめかた Powered by Rabbit 2.1.2
インデックスを作る
全文検索対象を決める
例: 店舗名
トークンの集合を格納する
テーブルを作る
トークン: 最小検索単位
↑にインデックスカラムを作る
Droongaの はじめかた Powered by Rabbit 2.1.2
インデックス例
# トークン用テーブル
# 初心者は常にこれでOK
table_create Tokens 
TABLE_PAT_KEY ShortText 
--default_tokenizer TokenBigram 
--normalizer NormalizerAuto
# インデックスカラム
column_create Tokens taiyaki_index 
COLUMN_INDEX|WITH_POSITION 
TaiyakiShops name
Droongaの はじめかた Powered by Rabbit 2.1.2
Groongaを使う流れ: 3
スキーマを作る1.
インデックスを作る2.
データを入れる3.
検索する4.
Droongaの はじめかた Powered by Rabbit 2.1.2
データを入れる
フォーマットはJSON
GroongaのJSONパーサーは緩い
多少壊れたJSONも受け付ける
Droongaの はじめかた Powered by Rabbit 2.1.2
データ例
load --table TaiyakiShops
[
{
"_key": "sapporo-yanagiya",
"name": "札幌の柳屋",
"location": "43.11629x141.34855"
}
]
Droongaの はじめかた Powered by Rabbit 2.1.2
Groongaを使う流れ: 4
スキーマを作る1.
インデックスを作る2.
データを入れる3.
検索する4.
Droongaの はじめかた Powered by Rabbit 2.1.2
検索する
全文検索対象を指定する
検索キーワードを指定する
Droongaの はじめかた Powered by Rabbit 2.1.2
検索例
select TaiyakiShops 
--match_columns name 
--query "札幌"
# [[...], ← レスポンスヘッダー
# [[[1], ← ヒット件数
# ↓ 出力内容のメタデータ
# [["_id","UInt32"],...],
# ↓ マッチしたレコード
# [1,"sapporo-yanagiya","...","札幌の柳屋"]]]]
Droongaの はじめかた Powered by Rabbit 2.1.2
Groongaを使う流れの再確認
スキーマを作る1.
インデックスを作る2.
データを入れる3.
検索する4.
Droongaの はじめかた Powered by Rabbit 2.1.2
流れ3
Droongaとはなにか
Groongaの使い方
↑とDroongaの使い方の違い
Droongaの考え方のイメージ
Droongaの はじめかた Powered by Rabbit 2.1.2
Droongaを使う流れ
クラスターを作る ← New1.
スキーマを作る2.
インデックスを作る3.
データを入れる4.
検索する5.
Droongaの はじめかた Powered by Rabbit 2.1.2
クラスターを作る
大事だけど時間がないので
省略!
Droongaの はじめかた Powered by Rabbit 2.1.2
流れ4
Droongaとはなにか
Groongaの使い方
↑とDroongaの使い方の違い
Droongaの考え方のイメージ
Droongaの はじめかた Powered by Rabbit 2.1.2
Droongaの構成
http://droonga.org/overview/
Droongaの はじめかた Powered by Rabbit 2.1.2
まとめ1
Droonga
スケールアウト可能なGroonga
Groongaと同じことがいろいろある
Groongaの理解が役立つ
Droongaの はじめかた Powered by Rabbit 2.1.2
まとめ2
Groongaの使い方
スキーマを作るa.
インデックスを作るb.
データを入れるc.
検索するd.
Droongaの はじめかた Powered by Rabbit 2.1.2
まとめ3
Droongaの使い方
クラスターを作るa.
以下、Groongaと同じb.
Droongaの はじめかた Powered by Rabbit 2.1.2
まとめ4
Droongaの構成
n個のGroongaで
大きなGroongaを構成
Droonga=大きなGroonga
Droongaの はじめかた Powered by Rabbit 2.1.2
今日の目標の確認
1人以上
Droongaデビューを見据えてGroongaデビュー

Droongaのはじめかた

  • 1.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Droongaの はじめかた 須藤功平 クリアコード 全文検索エンジンGroonga勉強会@札幌 2014/03/29 2014/03/29
  • 2.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 この勉強会とこの話の関連 勉強会 Groongaの利用事例を募集 この話 Groongaを使ったプロダクト Droongaの話
  • 3.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 お知らせ1 4.0.1リリース!
  • 4.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 4.0.1の新機能1 adjuster スコアブースト機能 使用例: 運営のオススメを上に表示 重み付きベクター レコード毎にn個の重みを設定 adjusterと連携するとよい
  • 5.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 4.0.1の新機能2 データベース肥大化抑制 Milkodeユーザーにも効果大なはず 注意: データベースの再作成が必要 データベースの後方互換性あり
  • 6.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 お知らせ2 1.0.1リリース!
  • 7.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 1.0.1の新機能 adjuster対応 重み付きベクター対応 ユーザー視点の使い勝手向上 grn2drn-schema, droonga- send, ... 今月は開発者としてよりもユーザーとして触っていたから
  • 8.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 今日の目標 1人以上 Droongaデビュー
  • 9.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 話すこと Droonga 未経験者向け ヒント
  • 10.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 流れ Droongaとはなにか Groongaの使い方 ↑とDroongaの使い方の違い Droongaの考え方のイメージ
  • 11.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Droongaとはなにか Distributed Groonga
  • 12.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Distributed? スケールアウト 可能
  • 13.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Droonga スケールアウト 可能な Groonga
  • 14.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Groongaが透けて見える スケールアウト 可能な Groonga
  • 15.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 GroongaとDroonga 一部はGroonga != Droonga 一部はGroonga == Droonga
  • 16.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Groonga != Droonga APIは違う DroongaにGroonga互換レイヤーあり 構成は違う 1台でDroongaを使っても嬉しくない 性能特性は違う 1台で捌ける量→Groongaの方が速い
  • 17.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Groonga == Droonga クエリーの書き方は同じ スキーマの考え方は同じ 検索機能はだいたい同じ
  • 18.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Droongaをはじめるために 教養として Groongaを 押さえて おくべき!
  • 19.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Groongaの使い方 Droongaとはなにか Groongaの使い方 ↑とDroongaの使い方の違い Droongaの考え方のイメージ
  • 20.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 なぜまずGroongaか Groongaはお手軽 1台のマシンで動く 設定ファイルなしで動く コマンドラインで動く
  • 21.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Groongaを使う流れ 初心者向けの簡易版 スキーマを作る1. インデックスを作る2. データを入れる3. 検索する4.
  • 22.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 スキーマを作る 検索したいものを1つ決める 例: たいやき屋検索ならたいやき屋 検索したいものの集まりを テーブルにする 例: TaiyakiShopsテーブル 付加情報をカラムにする 例: 店舗名、場所、メニューなど
  • 23.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 スキーマ例 table_create TaiyakiShops TABLE_HASH_KEY ShortText # 店舗名 column_create TaiyakiShops name COLUMN_SCALAR ShortText # 場所 column_create TaiyakiShops location COLUMN_SCALAR WGS84GeoPoint
  • 24.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Groongaを使う流れ: 2 スキーマを作る1. インデックスを作る2. データを入れる3. 検索する4.
  • 25.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 インデックスを作る 全文検索対象を決める 例: 店舗名 トークンの集合を格納する テーブルを作る トークン: 最小検索単位 ↑にインデックスカラムを作る
  • 26.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 インデックス例 # トークン用テーブル # 初心者は常にこれでOK table_create Tokens TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto # インデックスカラム column_create Tokens taiyaki_index COLUMN_INDEX|WITH_POSITION TaiyakiShops name
  • 27.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Groongaを使う流れ: 3 スキーマを作る1. インデックスを作る2. データを入れる3. 検索する4.
  • 28.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 データを入れる フォーマットはJSON GroongaのJSONパーサーは緩い 多少壊れたJSONも受け付ける
  • 29.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 データ例 load --table TaiyakiShops [ { "_key": "sapporo-yanagiya", "name": "札幌の柳屋", "location": "43.11629x141.34855" } ]
  • 30.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Groongaを使う流れ: 4 スキーマを作る1. インデックスを作る2. データを入れる3. 検索する4.
  • 31.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 検索する 全文検索対象を指定する 検索キーワードを指定する
  • 32.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 検索例 select TaiyakiShops --match_columns name --query "札幌" # [[...], ← レスポンスヘッダー # [[[1], ← ヒット件数 # ↓ 出力内容のメタデータ # [["_id","UInt32"],...], # ↓ マッチしたレコード # [1,"sapporo-yanagiya","...","札幌の柳屋"]]]]
  • 33.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Groongaを使う流れの再確認 スキーマを作る1. インデックスを作る2. データを入れる3. 検索する4.
  • 34.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 流れ3 Droongaとはなにか Groongaの使い方 ↑とDroongaの使い方の違い Droongaの考え方のイメージ
  • 35.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Droongaを使う流れ クラスターを作る ← New1. スキーマを作る2. インデックスを作る3. データを入れる4. 検索する5.
  • 36.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 クラスターを作る 大事だけど時間がないので 省略!
  • 37.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 流れ4 Droongaとはなにか Groongaの使い方 ↑とDroongaの使い方の違い Droongaの考え方のイメージ
  • 38.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 Droongaの構成 http://droonga.org/overview/
  • 39.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 まとめ1 Droonga スケールアウト可能なGroonga Groongaと同じことがいろいろある Groongaの理解が役立つ
  • 40.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 まとめ2 Groongaの使い方 スキーマを作るa. インデックスを作るb. データを入れるc. 検索するd.
  • 41.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 まとめ3 Droongaの使い方 クラスターを作るa. 以下、Groongaと同じb.
  • 42.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 まとめ4 Droongaの構成 n個のGroongaで 大きなGroongaを構成 Droonga=大きなGroonga
  • 43.
    Droongaの はじめかた Poweredby Rabbit 2.1.2 今日の目標の確認 1人以上 Droongaデビューを見据えてGroongaデビュー