これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。
pgroonga_snippet_html
関数pgroonga_snippet_html
関数は対象テキストの中からキーワード周辺のテキストを抽出して返します。これはKWIC(keyword in context)とも呼ばれています。Web検索エンジンの結果で使われていることが多いので見たことが多い人も多いでしょう。
使い方は2つあります。
text[] pgroonga_snippet_html(target, ARRAY[keyword1, keyword2, ...])
text[] pgroonga_snippet_html(target, ARRAY[keyword1, keyword2, ...], width)
2番めの使い方は、スニペットの長さをカスタマイズするときに便利です。
2番めの使い方は 2.4.2 から使えます。
以下は1つ目の使い方の説明です。
text[] pgroonga_snippet_html(target, ARRAY[keyword1, keyword2, ...])
target
はtext
型の値です。pgroonga_snippet_html
はtarget
の中からキーワード周辺のテキストを抽出します。
keyword1
, keyword2
, ...
はtext
型の配列です。これらのキーワードをtarget
から抽出します。1つ以上のキーワードを指定する必要があります。
以下は2つ目の使い方の説明です。
text[] pgroonga_snippet_html(target, ARRAY[keyword1, keyword2, ...], width)
target
はtext
型の値です。pgroonga_snippet_html
はtarget
の中からキーワード周辺のテキストを抽出します。
keyword1
, keyword2
, ...
はtext
型の配列です。これらのキーワードをtarget
から抽出します。1つ以上のキーワードを指定する必要があります。
width
は integer
型の値です。この引数は省略可能です。 width
のデフォルト値は 200 です。
この引数でスニペットの長さを動的に指定できます。
pgroonga_snippet_html
はtext
型の配列を返しますが、 width
にキーワードより少ない長さを指定するとレコードを出力しません。
返ってくる配列の各要素はキーワード周辺のテキストです。
キーワードは<span class="keyword">
と</span>
で囲まれます。target
中の<
、>
、&
、"
はHTMLエスケープされます。
各要素のtarget
由来の部分の最大サイズは200バイトです。単位は文字数ではなくバイトです。各要素は200バイトより大きくなることがあります。なぜなら、各要素には<span class="keyword">
と</span>
が含まれますし、HTMLエスケープした値が含まれることもあるからです。もし、<
がHTMLエスケープされると<
になり、バイトサイズは1から4に増えます。
例えば、スニペットの長さを調整したい場合は、 width
引数を以下のように使います。
SELECT pgroonga_snippet_html(
'Groonga is a fast and accurate full text search engine based on ' ||
'inverted index. One of the characteristics of Groonga is that a ' ||
'newly registered document instantly appears in search results. ' ||
'Also, Groonga allows updates without read locks. These characteristics ' ||
'result in superior performance on real-time applications.' ||
E'\n' ||
E'\n' ||
'Groonga is also a column-oriented database management system (DBMS). ' ||
'Compared with well-known row-oriented systems, such as MySQL and ' ||
'PostgreSQL, column-oriented systems are more suited for aggregate ' ||
'queries. Due to this advantage, Groonga can cover weakness of ' ||
'row-oriented systems.',
ARRAY['Groonga'],
50);
pgroonga_snippet_html
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"<span class=\"keyword\">Groonga</span> is a fast and accurate full text search en","he characteristics of <span class=\"keyword\">Groonga</span> is that a newly regi","search results. Also, <span class=\"keyword\">Groonga</span> allows updates witho"}
(1 row)
チュートリアルの中の例 も参照してください。