これはPGroonga 2.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。

pgroonga_score関数

概要

pgroonga_score関数はマッチした度合いを数値で返します。もし、検索したクエリーに対してそのレコードがマッチしているほどそのレコードのスコアーは高い数値になります。

構文

pgroonga_score関数を使うとマッチした度合いを数値で取得することができます。検索したクエリーに対してよりマッチしているレコードほど高い数値になります。

double precision pgroonga_score(record)

recordはテーブル名です。

次のスキーマが定義されているとします。

CREATE TABLE score_memos (
  id integer PRIMARY KEY,
  content text
);

CREATE INDEX pgroonga_score_memos_content_index
          ON score_memos
       USING pgroonga (id, content);

recordscore_memosにします。

SELECT *, pgroonga_score(score_memos)
  FROM score_memos
 WHERE content %% 'PGroonga';

pgroonga_score関数はdouble precision型の値でマッチした度合いを返します。

使い方

pgroonga_score関数を使うには、pgroongaインデックスにプライマリーキーに指定したカラムを追加する必要があります。もし、プライマリーキーに指定したカラムをpgroongaインデックスに追加していない場合は、pgroonga_score関数は常に0.0を返します。

pgroonga_score関数はインデックスを使わずに全文検索した場合は常に0.0を返します。言い換えると、pgroonga_score関数はシーケンシャルスキャンで全文検索を実行した場合は常に0.0を返します。

もし、pgroonga_score関数が意図せずに0.0を返しているときは、次のことを確認してください。

現在のところ、スコアーの値は「何個キーワードが含まれていたか」(TF、Term Frequency)です。Groongaはどのようにスコアーを計算するかをカスタマイズすることができます。しかし、PGroongaはまだその機能をサポートしていません。

チュートリアルの中の例を参考にしてください。

参考