これはPGroonga 1.X用のドキュメントです。新しいPGroongaを使っているならPGroonga 2.xのドキュメントを見てください。
pgroonga.table_name
関数pgroonga.table_name
関数はPGroongaのインデックス名をGroongaのテーブル名に変換します。Groongaのテーブル名はpgroonga.command
関数でGroongaのselect
コマンドを使うときに便利です。
Groongaのselect
コマンドを使うと重み機能を使えます。
この関数の構文は次の通りです。
text pgroonga.table_name(pgroonga_index_name)
pgroonga_index_name
はtext
型の値です。このインデックス名をGroongaのテーブル名に指定します。このインデックスはUSING pgroonga
で作ったインデックスでなければいけません。
pgroonga.table_name
はpgroonga_index_name
に対応するGroongaのテーブル名をtext
型の値として返します。もし、pgroonga_index_name
が存在していない、または、PGroongaのインデックスでない場合は、pgroonga.table_name
はエラーにします。
以下はサンプルのスキーマとデータです。このスキーマでは、検索対象のデータと出力対象のデータはどちらもインデックス対象のカラムです。
CREATE TABLE terms (
id integer,
title text,
content text,
tag varchar(256)
);
CREATE INDEX pgroonga_terms_index
ON terms
USING pgroonga (title, content, tag);
INSERT INTO terms
VALUES (1,
'PostgreSQL',
'PostgreSQLはリレーショナル・データベース管理システムです。',
'PostgreSQL');
INSERT INTO terms
VALUES (2,
'Groonga',
'Groongaは日本語対応の高速な全文検索エンジンです。',
'Groonga');
INSERT INTO terms
VALUES (3,
'PGroonga',
'PGroongaはインデックスとしてGroongaを使うためのPostgreSQLの拡張機能です。',
'PostgreSQL');
match_columns
オプションを使うと重みを使えます。
SELECT *
FROM json_array_elements(
pgroonga.command('select ' ||
pgroonga.table_name('pgroonga_terms_index') || ' ' ||
'--match_columns "title * 10 || content" ' ||
'--query "Groonga OR PostgreSQL OR 全文検索" ' ||
'--output_columns "_score, title, content" ' ||
'--sortby "-_score"'
)::json->1->0);
-- value
-- --------------------------------------------------------------------------------------------
-- [3]
-- [["_score","Int32"],["title","LongText"],["content","LongText"]]
-- [12,"Groonga","Groongaは日本語対応の高速な全文検索エンジンです。"]
-- [11,"PostgreSQL","PostgreSQLはリレーショナル・データベース管理システムです。"]
-- [2,"PGroonga","PGroongaはインデックスとしてGroongaを使うためのPostgreSQLの拡張機能です。"]
-- (5 rows)
drilldown
オプションを使うとドリルダウン機能を使えます。
SELECT *
FROM json_array_elements(
pgroonga.command('select ' ||
pgroonga.table_name('pgroonga_terms_index') || ' ' ||
'--match_columns "title * 10 || content" ' ||
'--query "Groonga OR PostgreSQL OR 全文検索" ' ||
'--output_columns "_score, title" ' ||
'--sortby "-_score" ' ||
'--drilldown "tag"'
)::json->1);
-- value
-- -------------------------------------------------------------------------------------------------
-- [[3],[["_score","Int32"],["title","LongText"]],[12,"Groonga"],[11,"PostgreSQL"],[2,"PGroonga"]]
-- [[2],[["_key","ShortText"],["_nsubrecs","Int32"]],["Groonga",1],["PostgreSQL",2]]
-- (2 rows)
Groongaのselect
コマンドはSQLのSELECT
分が遅いときの手段として使えます。