Text
Page: 1
全文検索の
基本的なしくみ
@myokoym
全文検索エンジン Groonga 勉強会@札幌
2015-06-14
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 2
全文検索の流れ
文書を登録
キーワードで検索
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 3
登録の流れ
ノーマライズ
トークナイズ
トークンをキーとして文書IDを
インデックスに登録
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 4
検索の流れ
ノーマライズ
トークナイズ
トークンでインデックスを検索
文書IDを取得
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 5
用語
ノーマライズ
トークナイズ
トークン
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 6
ノーマライズ
正規化
大文字小文字、全角半角などを揃え
る
ノーマライザーによって挙動が変わ
る
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 7
トークナイズ
文書やキーワードをトークンに
分割する
トークナイザーによって分け方
が異なる
大きく分けるとN-gramと形態素解析
の2種類
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 8
N-gram
文字数で分割する
bi-gramは2文字ごと
tri-gramは3文字ごと
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 9
形態素解析
品詞を判別して分割する
別途辞書が必要
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 10
トークン
インデックスのキー
Groongaで採用している転置
インデックス方式では、トーク
ンごとに文書リストが作成され
る
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 11
トークナイズの例
東京都府中市
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 12
bi-gram
東京/京都/都府/府中/中市/市
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 13
tri-gram
東京都/京都府/都府中/府中市/中
市/市
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 14
形態素解析
東京/都/府中/市
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 15
全文検索の流れ
文書を登録
キーワードで検索
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 16
全文検索の流れ
文書を登録
キーワードで検索
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 17
登録の流れ
ノーマライズ
トークナイズ
トークンをキーとして文書IDを
インデックスに登録
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 18
サンプル文書
文書ID
全文検索の基本的なしくみ
内容
1 カレー食べた
2 カレ-食べたい
3 カレー好き
Powered by Rabbit 2.1.7
Page: 19
ノーマライズ
1. カレー食べた
2. カレー食べたい
3. カレー好き
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 20
トークナイズ
MeCabの例
1. カレー/食べ/た
2. カレー/食べ/たい
3. カレー/好き
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 21
インデックスに登録
キー
カレー
食べ
た
たい
好き
全文検索の基本的なしくみ
文書IDリスト
[1 2 3]
[1 2]
[1]
[2]
[3]
Powered by Rabbit 2.1.7
Page: 22
全文検索の流れ
文書を登録
キーワードで検索
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 23
検索の流れ
ノーマライズ
トークナイズ
トークンでインデックスを検索
文書IDを取得
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 24
サンプルキーワード
食べた
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 25
ノーマライズ
食べた
ノーマライズ対象なし
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 26
トークナイズ
食べ/た
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 27
インデックス(再掲)
キー
カレー
食べ
た
たい
好き
全文検索の基本的なしくみ
文書IDリスト
[1 2 3]
[1 2]
[1]
[2]
[3]
Powered by Rabbit 2.1.7
Page: 28
トークンでインデックスを検
索
食べ -> [1 2]
た -> [1]
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 29
文書IDを取得
[1]
両方含まれるもの
設定によって出現位置も調べる
隣り合っているかどうかなど
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 30
ヒット1件
カレー食べた
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 31
ポイント
登録と検索で同じノーマライザ
ーとトークナイザーを使う必要
がある
それはなぜか?
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7
Page: 32
参考
Groongaの可変型Ngramトー
クナイザーについて - Naoya
Murakami - Rabbit Slide
Show
http://slide.rabbit-shocker.org/authors/naoa/
groonga-tokenizer-talks-naoa/
全文検索の基本的なしくみ
Powered by Rabbit 2.1.7