【ぜんぶんけんさく】

全文検索 とは?

最終更新:
💡 文書の中身を検索語と照合し、探したい文章を見つける

文書の本文などを検索対象にし、検索語に合う文書を見つける技術。テキストの解析、転置インデックスなどによる効率化、関連度による順位付けを組み合わせて使う。

📌 このページのポイント
転置インデックスで文書を逆引き 検索語 Python 語 → 文書IDの一覧(例) Python → D1・D3・D5 Java → D2・D4 Web → D2・D3 D1 入門 D3 Web D5 AI 実際の検索結果は解析・検索条件で変わる
Pythonを含む文書を逆引きする単純な例。語の正規化や除外、順位付けなどは検索方式・設定によって異なる。
ひよこ ひよこ
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)
💬 タイトルだけでなく本文などのテキストを検索対象にする、という意味だよ。実際に検索対象にする項目や語の扱いは、設定によって変わるんだ

参考資料

← 用語集にもどる