【てんちいんでっくす】

転置インデックス とは?

💡 本の巻末索引をデジタル化したら全文検索エンジンになった
📌 このページのポイント
転置インデックスの仕組み ドキュメント Doc1: Python API入門 Doc2: API設計ガイド Doc3: Python機械学習 転置 転置インデックス(単語→文書) Python → Doc1, Doc3 API → Doc1, Doc2 入門 → Doc1 機械学習 → Doc3 検索例: Python AND API Python: Doc1, Doc3 AND API: Doc1, Doc2 = Doc1 ヒット! 積集合で共通のドキュメントを特定 → Elasticsearch等の全文検索エンジンの基盤技術
転置インデックスのイメージ
ひよこ ひよこ

転置インデックスって何が転置されてるの?

ペンギン先生 ペンギン先生

普通は「この文書にはどんな単語があるか」だよね。転置インデックスはそれをひっくり返して「この単語はどの文書にあるか」にしたものなんだ。本の巻末索引を思い浮かべてみて。「API→p.12, p.45, p.103」みたいに単語からページを引けるでしょ?あれがまさに転置インデックスだよ

ひよこ ひよこ

Googleの検索もこれを使ってるの?

ペンギン先生 ペンギン先生

基本的にはそうだよ。Googleはウェブ全体のページを単語ごとに逆引きできるように巨大な転置インデックスを構築しているんだ。だから何十億ページの中から一瞬で検索結果を返せるんだね

ひよこ ひよこ

Elasticsearchっていうのもこれ?

ペンギン先生 ペンギン先生

その通り!ElasticsearchApache Solrも内部的にはApache Luceneという転置インデックスライブラリを使っているよ。文書を登録するときにトークナイザで単語に分割して、転置インデックスに格納するんだ

ひよこ ひよこ

複数のキーワードで検索するときはどうなるの?

ペンギン先生 ペンギン先生

たとえば「Python AND データベース」で検索するなら、Pythonを含む文書IDリストとデータベースを含む文書IDリストの積集合(AND演算)を取るだけだよ。OR検索なら和集合。ビットマップインデックスと似た発想だね

ひよこ ひよこ

日本語の検索は難しそう…

ペンギン先生 ペンギン先生

いいところに気づいたね。英語はスペースで単語を区切れるけど、日本語は形態素解析やN-gramで単語を分割する必要があるんだ。MeCabやkuromojiといった日本語トークナイザが活躍する場面だよ。検索精度はこのトークナイザの品質にかなり左右されるんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
転置インデックスって出てきたら「単語→文書の逆引き辞書で全文検索を支える仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Inverted Index」 = 転置索引
💬 通常の「文書→単語」の関係をInvert(反転)して「単語→文書」にしたからこの名前だよ
← 用語集にもどる