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