【入門編】 ランキング関数とハイライト関数 – PostgreSQL

こんにちは!データベースの世界へようこそ。

普段、私たちがWebサイトで検索窓にキーワードを入力して「検索!」ボタンを押すと、一瞬で「あなたにぴったりの情報」がズラッと並びますよね。あの魔法のような仕組み、実はPostgreSQLというデータベースには、最初からすごく優秀な「仕掛け」が用意されているんです。

今回は、その裏側で働いている「ts_rank」と「ts_headline」という2つの機能について、少しお話ししてみたいと思います。難しい設定の話は一旦置いておいて、まずはこの仕組みを「図書館の司書さん」に例えてイメージしてみましょう。

—

1. 検索結果の「並び順」を決める魔法:ts_rank

想像してみてください。あなたは巨大な図書館で「美味しいカレーの作り方」という本を探しています。

司書さんは、膨大な本の中から「カレー」という言葉が含まれる本を全部持ってきてくれます。でも、ただ持ってくるだけじゃ不親切ですよね?

  • タイトルに「カレー」と書いてある本
  • 中身の目次に「カレー」が何度も出てくる本
  • たった1ページだけ、隅っこに小さく「カレー」と書かれた本

この中で、あなたが一番読みたそうなのはどれでしょう? もちろん、前者のほうですよね。

PostgreSQLの`ts_rank`は、まさにこの「司書さんの直感」を計算してくれる関数です。「この本(データ)には、探しているキーワードがどれくらい濃密に含まれているかな?」というスコアを、数値で計算してくれるんです。

  • `ts_rank` がやっていること: 「このキーワード、この文章の中に何回出てくる? タイトルに近い場所にある? それとも重要度の低い場所?」といったルールで、0点から1点(あるいはそれ以上)の間で点数をつけてくれます。

この点数が高い順に並び替えれば、ユーザーにとって一番役に立ちそうな情報が、検索結果のトップに表示されるわけです。便利ですよね!

—

2. 探している箇所をピカッと照らす:ts_headline

さて、お目当ての本を見つけたとします。でも、ページをめくっても、どこに「カレーのレシピ」が書いてあるのか探すのは大変ですよね。

そこで登場するのが`ts_headline`です。これは、検索したキーワードの周辺だけを切り取って、「ここですよ!」とハイライトしてくれる機能です。

  • `ts_headline` がやっていること:
  • 全文の中から「カレー」が含まれる周辺の文章だけを上手い具合に抜き出す(これをスニペットと言います)。
  • 検索したキーワードに「カレー」のような目印をつけて、強調表示してくれる。

これがあるおかげで、私たちは長い文章を全部読まなくても、「ああ、ここにお目当てのことが書いてあるんだな」と一目で判断できるんです。Googleの検索結果の下に出てくる、あの短い説明文をイメージすると分かりやすいかもしれませんね。

—

今日から使える「検索体験」のコツ

もし皆さんが今、自分のアプリやサイトで検索機能を作ろうとしているなら、まずはこの2つを組み合わせてみてください。

1. `ts_rank` で並び替える: ユーザーが一番知りたいであろう「濃い情報」を上位に持ってくる。
2. `ts_headline` で見せる: 検索結果に短い要約を表示して、中身を読まなくても何が書いてあるか分かるようにする。

これだけで、ユーザーの検索体験はぐっとプロフェッショナルなものに変わります。

最初は「データベースの関数」なんて聞くと身構えてしまうかもしれませんが、結局のところ、これらは「いかにユーザーの手間を減らして、必要な情報を届けるか」という、おもてなしの心そのものなんですよ。

PostgreSQLには、こうした「優しさ」がたくさん詰まっています。ぜひ、皆さんのプロジェクトでも試してみてくださいね。

それでは、また次回のブログでお会いしましょう!Happy Coding!

コメント

タイトルとURLをコピーしました