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

pgroonga_score関数

概要

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

構文

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

使い方は2つあります。

double precision pgroonga_score(tableoid, ctid)
double precision pgroonga_score(record)

前者は2.0.4以降で利用できます。後者よりも速いです。

後者は2.0.4以降は非推奨になりました。

以下は前者の使い方の説明です。

double precision pgroonga_score(tableoid, ctid)

tableoidはテーブルのOIDです。このパラメーターにはtableoidシステムカラムを指定してください。

ctidは対象行のIDです。このパラメーターにはctidシステムカラムを指定してください。

この使い方ではPGroongaのインデックスにプライマリーキーを追加する必要はありません。

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

CREATE TABLE score_memos (
  content text
);

CREATE INDEX pgroonga_score_memos_content_index
          ON score_memos
       USING pgroonga (content);

このpgroonga_scoreの使い方は次のようになります。

SELECT *, pgroonga_score(tableoid, ctid)
  FROM score_memos
 WHERE content &@~ 'PGroonga';

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

以下は後者の使い方の説明です。

double precision pgroonga_score(record)

recordはテーブル名です。

この使い方のpgroonga_scoreではPGroongaのインデックスにインデックスを追加する必要があります。

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

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(record)版を使う場合はPGroongaのインデックスにプライマリーキーを追加する必要があります。PGroongaのインデックスにプライマリーキーを指定していない場合は、pgroonga_score関数は常に0.0を返します。

pgroonga_score(tableoid, ctid)版を使う場合は、PGroongaのインデックスにプライマリーキーを追加する必要はありません。

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

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

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

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

参考