【てんちいんでっくす】
転置インデックス とは?
💡 本の巻末索引をデジタル化したら全文検索エンジンになった
📌 このページのポイント
- 単語(ターム)をキーにして、その単語を含むドキュメントIDのリストを保持する
- 全文検索エンジン(Elasticsearch、Solr)の基盤技術
- 複数キーワードの検索はドキュメントIDリストの積集合・和集合で実現
- TF-IDFやBM25などのスコアリングと組み合わせて検索結果の関連度を計算する
転置インデックスって何が転置されてるの?
Googleの検索もこれを使ってるの?
Elasticsearchっていうのもこれ?
その通り!ElasticsearchもApache Solrも内部的にはApache Luceneという転置インデックスライブラリを使っているよ。文書を登録するときにトークナイザで単語に分割して、転置インデックスに格納するんだ
複数のキーワードで検索するときはどうなるの?
たとえば「Python AND データベース」で検索するなら、Pythonを含む文書IDリストとデータベースを含む文書IDリストの積集合(AND演算)を取るだけだよ。OR検索なら和集合。ビットマップインデックスと似た発想だね
日本語の検索は難しそう…
いいところに気づいたね。英語はスペースで単語を区切れるけど、日本語は形態素解析やN-gramで単語を分割する必要があるんだ。MeCabやkuromojiといった日本語トークナイザが活躍する場面だよ。検索精度はこのトークナイザの品質にかなり左右されるんだ
📖 おまけ:英語の意味
「Inverted Index」 = 転置索引
💬 通常の「文書→単語」の関係をInvert(反転)して「単語→文書」にしたからこの名前だよ