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

pgroonga_highlight_html関数

1.0.7で追加。

概要

pgroonga_highlight_html関数は指定したテキスト中にある指定したキーワードを<span class="keyword"></span>で囲みます。指定したテキスト中にある&などのHTMLの特別な文字はエスケープされます。

構文

この関数の構文は次の通りです。

text pgroonga_highlight_html(target, ARRAY[keyword1, keyword2, ...])

targetはハイライト対象のテキストです。型はtextです。

キーワードは<span class="keyword"></span>で囲まれています。target中の<>&"はHTMLエスケープされます。

pgroonga_highlight_htmltarget中のキーワードをマークアップします。型はtextです。

キーワードは<span class="keyword"></span>で囲まれます。target中の<>&"はHTMLエスケープされます。

使い方

少なくとも1つキーワードを指定しなければいけません。

SELECT pgroonga_highlight_html('PGroonga is a PostgreSQL extension.',
                               ARRAY['PostgreSQL']) AS highlight_html;
--                           highlight_html                          
-- ------------------------------------------------------------------
--  PGroonga is a <span class="keyword">PostgreSQL</span> extension.
-- (1 row)

複数のキーワードを指定できます。

SELECT pgroonga_highlight_html('PGroonga is a PostgreSQL extension.',
                               ARRAY['Groonga', 'PostgreSQL']) AS highlight_html;
--                                         highlight_html                                         
-- -----------------------------------------------------------------------------------------------
--  P<span class="keyword">Groonga</span> is a <span class="keyword">PostgreSQL</span> extension.
-- (1 row)

pgroonga_query_extract_keywords関数を使うとクエリーからキーワードを抽出できます。

SELECT pgroonga_highlight_html('PGroonga is a PostgreSQL extension.',
                               pgroonga_query_extract_keywords('Groonga PostgreSQL -extension')) AS highlight_html;
--                                         highlight_html                                         
-- -----------------------------------------------------------------------------------------------
--  P<span class="keyword">Groonga</span> is a <span class="keyword">PostgreSQL</span> extension.
-- (1 row)

HTMLの特別な文字は自動でエスケープされます。

SELECT pgroonga_highlight_html('<p>PGroonga is Groonga & PostgreSQL.</p>',
                               ARRAY['PostgreSQL']) AS highlight_html;
--                                     highlight_html                                     
-- ---------------------------------------------------------------------------------------
--  &lt;p&gt;PGroonga is Groonga &amp; <span class="keyword">PostgreSQL</span>.&lt;/p&gt;
-- (1 row)

文字は正規化されます。

SELECT pgroonga_highlight_html('PGroonga + pglogical = replicatable!',
                               ARRAY['Pg']) AS highlight_html;
                                         highlight_html                                         
------------------------------------------------------------------------------------------------
 <span class="keyword">PG</span>roonga + <span class="keyword">pg</span>logical = replicatable!
(1 row)

マルチバイト文字にも対応しています。

SELECT pgroonga_highlight_html('10㌖先にある100キログラムの米',
                               ARRAY['キロ']) AS highlight_html;
--                                     highlight_html                                     
-- ---------------------------------------------------------------------------------------
--  10<span class="keyword">㌖</span>先にある100<span class="keyword">キロ</span>グラムの米
-- (1 row)

参考