Groongaソースコード読書会2

第2回で初参加した私が得た、GroongaやC言語やconfigureやGDBに関する知見のまとめです。参加レポートに代えさせていただきます。
0
みょこ @myokoym

着席していました / Groongaソースコード読書会2 (07月02日) #groonga groonga.doorkeeper.jp/events/26764

2015-07-02 19:47:13
みょこ @myokoym

configureのオプションは ./configure --help で見れる #groonga

2015-07-02 19:49:50
みょこ @myokoym

configureのオプションの --enable-piyo-piyo をnoする方法2通りある。 --enable-piyo-piyo=no のように値をnoにする方法と、 --disable-piyo-piyo のようにenableをdisableする方法。 #groonga

2015-07-02 19:53:37
みょこ @myokoym

GroongaのテーブルはキーとIDのペア。カラムはIDと値のペア。テーブルとカラムはIDで紐付いているので、普通に使うときはレコードのように扱える。 #groonga

2015-07-02 20:11:55
みょこ @myokoym

Cのオブジェクトとは、型情報を持ったデータの集まり。grn_obj型はデータのほうに自分はテーブルなのかカラムなのか何なのかという情報を持っている。grn_objが何型なのか判別する関数もある。 #groonga

2015-07-02 20:15:01
みょこ @myokoym

転置インデックスを速くするポイントは、キーを探すところと、キーに紐づくレコードのリスト(ポスティングリスト)を探すところの2箇所ある。 #groonga

2015-07-02 20:22:36
みょこ @myokoym

Groongaでインデックスと呼んでいるのはポスティングリストの部分だけ。キーの部分は普通のテーブルと同じ。ポスティングリストの部分はインデックスカラムとも呼ぶ。 #groonga

2015-07-02 20:23:40
みょこ @myokoym

"ちょっと長いのでgrooにします"

2015-07-02 20:34:42
みょこ @myokoym

トークナイザーは文章を分割する。分割したものをトークンと呼ぶ。検索するときもキーワードを分割する。キーワードを分割したトークンが全部入っていて、かつポスティングリストと一緒に記録している位置情報が隣り合っている文章を一致とみなす。 #groonga

2015-07-02 20:43:06
みょこ @myokoym

Groongaでは、インデックスカラム作成時にWITH_POSITIONを指定しないと位置情報が記録されないので、分割したトークンが全部入っていればおっけーとなる。なので、全文検索で使うときはWITH_POSITIONを指定するようにする。 #groonga

2015-07-02 20:44:07
みょこ @myokoym

GroongaくんのTokenBigramはただのBigramではない。ノーマライザーと一緒に使ったときは、連続する英数字はひとつのトークンにする。ただし、ハイフンなどの記号では区切られる。日本語は2文字ずつ分割する。 #groonga

2015-07-02 20:44:49
みょこ @myokoym

GDBでgrn_objの中身を見たいときは、grn_p関数を使って、 p grn_p(ctx, grn_objのオブジェクトの変数名) のようにする #groonga

2015-07-02 20:55:45
みょこ @myokoym

GDBでCtrl-x Ctrl-aと入力すると、ソースコードを十数行表示したままカーソルを移動できるようになる。戻すときはもう一度Ctrl-x Ctrl-aする。 #groonga

2015-07-02 20:59:41
みょこ @myokoym

GDBでは、n(next)で次の行に進む。s(step)で関数の中に入れる。すとうさんがGDBでデバッグするときは、まずひとつの値に注目して、それをpなどで見ながらnでざっくり進んでいく。値が変わったら、もう大事なところは通り過ぎたんだなと思って絞り込んでいく。 #groonga

2015-07-02 21:04:52
みょこ @myokoym

いま使っているノーマライザーは大文字を小文字にするやつなので、検索キーワードに大文字を入れたほうがわかりやすい #groonga

2015-07-02 21:15:42
みょこ @myokoym

GDBで「display 変数名」というコマンドを実行すると、nキーを押したときに変数の値が常に表示される。さらに、Ctrl-x sで、Enterを押さなくてもnキーだけで進むモードになる。 #groonga

2015-07-02 21:33:09
みょこ @myokoym

トークナイズした後は、基本的にIDで扱われる(トークンで扱うと、長さが違ったりして大変だし重いため)。トークンのIDはソースコードではtidという変数名で表されていたりする。 #groonga

2015-07-02 21:41:10