検索にヒットするたくさんのデータから、より求めている内容に適合すると思われるデータを選ぶ際に利用できるのが、検索スコアです。検索スコアはpgs2getscore関数で取得することができます。
# SELECT txt, pgs2getscore(ctid, 'idx') FROM tbl
WHERE txt @@ 'こんにちは さようなら';
txt | pgs2getscore
------------------------+--------------
こんにちは、さようなら | 10
こんにちは | 5
さようなら | 5
(3 rows)
関数の引数にはctidとインデックス名を指定します。この例を見るとわかるように、検索キーワードが出現する回数が多いデータほど、検索スコアが高くなります。また、部分一致検索でヒットした場合には、少し低めのスコアが与えられます。
# SELECT txt, pgs2getscore(ctid, 'idx') FROM tbl
WHERE txt @@ '*E3 こんに OR さようなら';
txt | pgs2getscore
------------------------+--------------
さようなら | 5
こんにちは、さようなら | 5
こんにちは | 3
(3 rows)
Ludiaはctidをスコア順(の降順)にソートした上で返すため、WHERE句で指定する条件が1つの全文検索条件のみの簡単な場合であれば、目的とするデータが得られるはずです。しかし、他の条件と組み合わせたりした場合には、最終的に得られる結果が検索スコア順になっているとは限らないため、明示的にソートする必要があります。
# SELECT txt, pgs2getscore(ctid, 'idx') as score FROM tbl
WHERE txt @@ 'こんにちは さようなら' ORDER BY score DESC;
今回は、全文検索の基本的なバリエーションについて紹介しつつ、全文検索クエリの指定順や、検索方式の自動的な切り替え、フラグによるインデックス設定の指定など、利用する際の注意点について説明しました。
次回は全文検索インデックスの利用法の応用編を紹介する予定です。
|