【ぜんぶんけんさく】
全文検索 とは?
最終更新:
💡 文書の中身を検索語と照合し、探したい文章を見つける
文書の本文などを検索対象にし、検索語に合う文書を見つける技術。テキストの解析、転置インデックスなどによる効率化、関連度による順位付けを組み合わせて使う。
📌 このページのポイント
- 文書の本文などを解析し、検索語に合う文書を探す
- 転置インデックスでは検索用の語から、その語を含む文書を逆引きする
- 日本語では形態素解析やN-gramなどで検索用の単位を取り出す
- MySQL・PostgreSQLの全文検索機能やElasticsearchなどで、関連度による順位付けもできる
LIKEで部分一致を調べるだけじゃだめなの?
文字列の部分一致が目的なら、LIKEが合う場合もあるよ。全文検索では語の解析や関連度の順位付けも扱えるんだ。ただし同じ検索結果になるとは限らない。先頭に%があるLIKEでも、PostgreSQLのpg_trgmのように対応するインデックスを使える場合があり、速さはデータや検索条件・設定によって変わるよ。
転置インデックスって何?
「検索用の語→その語を含む文書の一覧」という対応を記録するものだよ。本の索引で語から掲載ページを探すイメージだね。例えばPythonという語から文書D1・D3・D5を見つけられる。全文検索の効率化によく使うけれど、全ての方式で必須というわけではないよ。
日本語はどうやって検索用の語を取り出すの?
スペースだけでは区切りにくいので、意味のある語を取り出す形態素解析や、連続するN文字を取り出すN-gramを使うよ。例えば「東京都」の2-gramは「東京」「京都」になる。この「京都」は地名として切り出した単語ではなく、隣り合う2文字なんだ。分割方法や除外する語の設定によって、検索結果が変わるよ。
Elasticsearchとデータベースの全文検索はどう使い分けるの?
MySQLやPostgreSQLの全文検索機能を使う方法も、Elasticsearchに検索用データを持たせる方法もあるよ。必要な検索機能、関連度の調整、データ量や運用体制を見て選ぶんだ。元のデータベースと別に検索用データを持つ設計では、更新を反映する方法や反映までの遅れも考えておこう。
まとめ:ざっくりこれだけ覚えればOK!
「全文検索」って出てきたら「文書の中身から検索語に合う文章を探す仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Full-Text Search」 = 全文(Full-Text)検索(Search)
💬 タイトルだけでなく本文などのテキストを検索対象にする、という意味だよ。実際に検索対象にする項目や語の扱いは、設定によって変わるんだ